
点分治
Exception2017
OI总结
展开
-
poj1741 tree 点分治
原题:http://poj.org/problem?id=1741题解:求长度不超过k的路径长度。这是道点分治的题。点分治首先要求树的重心。然后从重心开始就出过重心的答案,在向子树转移减掉重复的。在重复上面的过程。#include<cstdio>#include<cstring>#include<algorithm>#include<ios...原创 2019-03-30 21:50:38 · 127 阅读 · 0 评论 -
bzoj2152[国家集训队]聪聪可可 点分治
原题:https://www.lydsy.com/JudgeOnline/problem.php?id=2152题解:本质上是求树上有多少3的倍数长度的路径。树上路径的个数考虑用点分治。对于每一次分治我们需要求出过一点3的倍数的长度的路径,不妨从这个点搜索,记上余数是0,1,2,的链数,为t[0],t[1],t[2]。两两组合并且可以颠倒,即t[0]*t[0]+2*t[1]*t[2]。转移时减...原创 2019-03-31 22:28:44 · 167 阅读 · 0 评论 -
P3806 [模版]点分治1
原题:https://www.luogu.org/problemnew/show/P3806题解:求树上是否有长度L的路径。考虑用点分治和离线,在一点为根时,dfs出个点到根的路径枚举每一条路径,对于m组查询,求出是否有L-当前枚举的长度。可以开一个很大的数组记录。在结束时要把数组清掉,不能用memset,因为我们不是每一个都用到了,只用把dfs的清掉就行了。#include<bi...原创 2019-04-02 23:35:29 · 138 阅读 · 0 评论 -
bzoj1316 树上的询问 点分治
原题:https://www.lydsy.com/JudgeOnline/problem.php?id=1316题解:这题几乎和洛谷的题一样,但bzoj上不能把数组开到1000000。。。我开了结果re了所以我们在处理有没有相同的时候用二分的思路。排完序枚举长度,lower/upper查找区间就行。#include<bits/stdc++.h>#define inf (1&...原创 2019-04-03 00:11:07 · 150 阅读 · 0 评论 -
BJOI2017 树的难题 点分治+线段树
原题:https://loj.ac/submission/420518题解:要找到长度L-R的染色的最大权值。长度L-R肯定要用点分治,通过分析可以得出对于每一个子树,只要考虑当前分治中心到每颗子树的颜色是不是一样的就行了。即相同的要减去1个。我们考虑用两颗线段树维护。线段树的坐标表示长度。对于每一组询问,要从[max(0,L-num),y-num]中找到最大值。为了方便起见,把所有长度都+1...原创 2019-04-17 22:53:17 · 253 阅读 · 0 评论