POJ1471 树

给定一个有\(N\)个点(编号 \(0,1,…,N-1\) )的树,每条边都有一个权值(不超过\(1000\))。
树上两个节点\(x\)\(y\)之间的路径长度就是路径上各条边的权值之和。
求长度不超过\(K\)的路径有多少条。

输入格式

输入包含多组测试用例。
每组测试用例的第一行包含两个整数N和K。
接下来\(N-1\)行,每行包含三个整数\(u, v, l\),表示节点\(u\)\(v\)之间存在一条边,且边的权值为\(l\)
当输入用例\(N=0,K=0\)时,表示输入终止,且该用例无需处理。

输出格式
每个测试用例输出一个结果。
每个结果占一行。

数据范围
\(N≤10000\)

输入样例:

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

输出样例:

8

若指定节点\(p\)为根,则对节点p而言,树上的路径可分为两类:

  1. 经过根节点\(p\)
  2. 包含于\(p\)的某一棵子树中(未经过根节点\(p\)

根据分治的思想,对于第2类路径,可以把\(p\)的每棵子树作为子问题,递归进行处理。

对于第1类路径,我们对以p为根节点的子树进行dfs,找出

猜你喜欢

转载自www.cnblogs.com/keik/p/12431986.html