[树的点分治] 不虚就是要AK

hzwer%%%,czy%%%
题目描述 Description

czy很火。因为又有人说他虚了。为了证明他不虚,他决定要在这次比赛AK。现在他正在和别人玩一个游戏:在一棵树上随机取两个点,如果这两个点的距离是4的倍数,那么算czy赢,否则对方赢。现在czy想知道他能获胜的概率。

输入 Input

本题多组数据。对于每组数据:
第一行一个数n,表示树上的节点个数。
接下来n1条边a,b,c描述ab有一条长度为c的路径。
n=0时表示读入结束。
数据组数不超过10。无部分分。

输出 Output

最终输出的概率要求分数的分子和分母的和尽量小且非负数。

样例输入 Sample Input

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

样例输出 Sample Output

7/25

限制 Limits

数据范围
[树的点分治] 不虚就是要AK
Time Limit : 2s & Memory Limit : 128MB

树上询问两点间距离,当然是点分治题……但是4的倍数?
统计disi为在4的剩余系下两点间距离为i的点对个数。然后合并就容易推得了……然后注意不同子树之间统计的处理(再记录一个dp数组处理)。
最后的答案?
先考虑在树上随意取点,考虑到点分治统计中的无序性(也就是同一条路径会被统计两次),所以随意取点的可能性为n2,取出为4的倍数的路径数需要乘以2。因为0也是4的倍数,取到的两点相同时可以计入答案,可是点分治里没有统计这种情况,所以要加上n,然后化简个分数,输出答案。
时间复杂度O(Tnlog2n)
Code