博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【poj1741 Tree】
阅读量:4932 次
发布时间:2019-06-11

本文共 1752 字,大约阅读时间需要 5 分钟。

Description

  Give a tree with n vertices,each edge has a length(positive integer less than 1001). 
  Define dist(u,v)=The min distance between node u and v. 
  Give an integer k,for every pair (u,v) of vertices is called valid if and only if dist(u,v) not exceed k. 
  Write a program that will count how many pairs which are valid for a given tree. 

Input

  The input contains several test cases. The first line of each test case contains two integers n, k. (n<=10000) The following n-1 lines each contains three integers u,v,l, which means there is an edge between node u and v of length l. 
  The last test case is followed by two zeros. 

Output

  For each test case output the answer on a single line.

Sample Input

 5 4 1 2 3 1 3 1 1 4 2 3 5 1 0 0

Sample Output

 8

题解:

  第一次写点分治感觉还好吧,对于一个子树先dfs预处理出sz(O(n)),然后dfs求出树的重心(O(n)),然后再分治下去(log)。

  计算答案时会算重,比如两个点都属于当前重心的一个子树,这两个点是不会通过当前重心的,所以要容斥删去。(记得每次寻找重心要初始化)

  怎么删,把重心的子节点再次计算减掉即可。

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 struct nd{ 8 int to,next,v; 9 } e[20005];10 int head[10005],dep[10005],d[10005],mx[10005],sz[10005];11 bool vis[10005];12 int sum,ans,rt;13 int n,k,cnt;14 inline void insert(int u,int v,int w){15 e[++cnt].next=head[u];16 head[u]=cnt;17 e[cnt].to=v;18 e[cnt].v=w;19 }20 inline void findG(int now,int fa){21 mx[now]=0;22 for(int i=head[now];i;i=e[i].next){23 if(e[i].to==fa || vis[e[i].to]) continue;24 findG(e[i].to,now);25 mx[now]=max(mx[now],sz[e[i].to]);26 }27 mx[now]=max(mx[now],sum-sz[now]);28 if(mx[now]

转载于:https://www.cnblogs.com/Dndlns/p/7906396.html

你可能感兴趣的文章
Perl DBI模块的例子
查看>>
python中str和repr区别
查看>>
升级win10后无法使用桥接网络解决方法
查看>>
如何进行跨网段的远程唤醒
查看>>
数据挖掘-同比与环比
查看>>
nginx+php详解
查看>>
怎样取php一个字符串中的某个字符
查看>>
我的友情链接
查看>>
RedHat6 管理应用服务【11】
查看>>
stm32F10x复习-1
查看>>
redis的学习使用(ubuntu系统下)
查看>>
20135226黄坤信息安全系统设计基础期末总结
查看>>
轻松快捷创建VSFTP虚拟用户
查看>>
[转]Javascript原型继承
查看>>
[转] vue异步处理错误
查看>>
CSS 3D动画概述菜鸟级解读之一
查看>>
分布式系列文章 —— 从 ACID 到 CAP / BASE
查看>>
方法签名与方法重载
查看>>
cmake 变量
查看>>
[Programming Entity Framework] 第2章 探究实体数据模型(EDM)(一)
查看>>