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

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

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

输入 Input

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

输出 Output

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

样例输入 Sample Input

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

样例输出 Sample Output

7/25

限制 Limits

数据范围
Limits
Time Limit : 2s & Memory Limit : 128MB

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值