由于考场上想出点分治可是不会写(2333 蒟蒻花了一天写点分治qwq
3365: [Usaco2004 Feb]Distance Statistics 路程统计
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 389 Solved: 224
[ Submit][ Status][ Discuss]
Description
Input
Output
Sample Input
1 6 13 E
6 3 9 E
3 5 7 S
4 1 3 N
2 4 20 W
4 7 2 S
10
Sample Output
有五对道路之间的距离小于10
1-4,距离为3
4-7,距离为2
1-7,距离为5
3-5,距离为7
3-6,距离为9
HINT
Source
HOME
Back
Solution
我们通过递归的方式不断地找子树的重心,递归解决问题,通过dfs更新子树中到重心的距离,从小到大排序,统计答案。
2599: [IOI2011]Race
Time Limit: 70 Sec Memory Limit: 128 MBSubmit: 4692 Solved: 1377
[ Submit][ Status][ Discuss]
Description
给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000
Input
第一行 两个整数 n, k
第二..n行 每行三个整数 表示一条无向边的两端和权值 (注意点的编号从0开始)
Output
一个整数 表示最小边数量 如果不存在这样的路径 输出-1
Sample Input
0 1 1
1 2 2
1 3 4
Sample Output
HINT
2018.1.3新加数据一组,未重测
Source
Solution
这道题目稍微有点麻烦,我们需要用t[v]表示距离重心权值和为v边数最少的点的边数(有点绕口)那么还是对于每个子树递归解决问题,找到重心dfs更新信息(注意:d更新完之后还是需要还原回来的!(这个调了好久
Problem 2152. – 聪聪可可
2152: 聪聪可可
Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 4593 Solved: 2391
[ Submit][ Status][ Discuss]
Description
聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃、两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已经玩儿腻了这种低智商的游戏。他们的爸爸快被他们的争吵烦死了,所以他发明了一个新游戏:由爸爸在纸上画n个“点”,并用n-1条“边”把这n个“点”恰好连通(其实这就是一棵树)。并且每条“边”上都有一个数。接下来由聪聪和可可分别随即选一个点(当然他们选点时是看不到这棵树的),如果两个点之间所有边上数的和加起来恰好是3的倍数,则判聪聪赢,否则可可赢。聪聪非常爱思考问题,在每次游戏后都会仔细研究这棵树,希望知道对于这张图自己的获胜概率是多少。现请你帮忙求出这个值以验证聪聪的答案是否正确。
Input
输入的第1行包含1个正整数n。后面n-1行,每行3个整数x、y、w,表示x号点和y号点之间有一条边,上面的数是w。
Output
以即约分数形式输出这个概率(即“a/b”的形式,其中a和b必须互质。如果概率为1,输出“1/1”)。
Sample Input
1 2 1
1 3 2
1 4 1
2 5 3
Sample Output
【样例说明】
13组点对分别是(1,1) (2,2) (2,3) (2,5) (3,2) (3,3) (3,4) (3,5) (4,3) (4,4) (5,2) (5,3) (5,5)。
【数据规模】
对于100%的数据,n<=20000。
HINT
Source
HOME
Back
Solution
对于这题,套路还是之前的套路,但是处理的方式稍微有点不同。我们dfs处理其中余1的个数,余2的个数,余0的个数(用a[x]表示),那么答案就是 a[0]∗a[0]+2∗a[1]∗a[2] a [ 0 ] ∗ a [ 0 ] + 2 ∗ a [ 1 ] ∗ a [ 2 ] 因为1,2与2,1算两种!
小个结吧
点分治这个东西有点暴力,但是我们每次都找重心保证了复杂度,是处理树上路径问题的利器。
首先每一条路径要么经过该点,要么经过其儿子。经过其儿子的我们递归处理,那么我们考虑处理经过该点的路径。
我们用dfs统计整棵树到根的答案,然后统计。那么我们发现可能存在路径两个点的lca不在该点上,那么我们就需要减去这一部分答案。
(蒟蒻水平不足,请大佬指教 逃