Decription: 某天WJMZBMR学习了一个神奇的算法:树的点分治! 这个算法的核心是这样的: 消耗时间=0 Solve(树 a) 消耗时间 += a 的 大小 如果 a 中 只有 1 个点,退出;否则在a中选一个点x,在a中删除点x,那么a变成了几个小一点的树,对每个小树递归调用Solve ...
分类:
其他好文 时间:
2019-12-08 15:27:58
阅读次数:
89
一些无关紧要的事: 似乎很久没写题解了……象征性地更一篇。另外很多blog都设了私密,不是很敢公开,不过说不定哪天会公开的。 link 题意: 最优树的点分治:使得点分最大层数最小。(听说是经典问题) $n\leq 10^5.$ 题解: 性质+贪心。 给每个点按照高度标号(即从深度最深的开始标1,它 ...
分类:
其他好文 时间:
2018-08-17 11:14:01
阅读次数:
202
给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. 首先要知道什么是树的重心,树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重 心后,生成的多棵树尽可能平衡. 实际上树的重心在树的点分治中有 ...
分类:
其他好文 时间:
2018-08-11 01:18:20
阅读次数:
153
在说点分治之前先说一下序列分治,序列分治大家都知道吧,就是把序列从某个位置(一般是中间点)分成两部分,统计跨越两部分的答案再递归处理两部分。树的点分治的道理和序列分治很像,但树没有中点,该怎么分治呢?再对比序列分治,序列相当于一条链,而序列的中点就是这条链的重心,那么树的分治点就可以是这棵树的重心。 ...
分类:
其他好文 时间:
2018-06-14 21:07:25
阅读次数:
232
题目大意: 求树上所有路径中的前k长路。 题解: 我们把这棵树的点分治序处理出来。假设我们确定了一个分治中心下的一条链,我们需要找到另一条链使得两条加起来最大。 那么另外一条可行链的端点在点分治序上一定形成一段区间。然后就变成了对于一个右端点都有一段可行的左端点,要求两点权值和最大。 之后就变成了B ...
分类:
其他好文 时间:
2018-04-07 16:06:40
阅读次数:
165
题目描述 给出一棵 $n$ 个点的树,每条边的边权为1或0。求有多少点对 $(i,j)$ ,使得:$i$ 到 $j$ 的简单路径上存在点 $k$ (异于 $i$ 和 $j$ ),使得 $i$ 到 $k$ 的简单路径上0和1数目相等,$j$ 到 $k$ 的简单路径上0和1数目也相等。 输入 第1行包含 ...
分类:
其他好文 时间:
2018-03-20 21:46:08
阅读次数:
192
题目描述 给你一棵 $n$ 个点的树,对这棵树进行随机点分治,每次随机一个点作为分治中心。定义消耗时间为每层分治的子树大小之和,求消耗时间的期望。 输入 第一行一个整数n,表示树的大小接下来n-1行每行两个数a,b,表示a和b之间有一条边注意点是从0开始标号的 输出 一行一个浮点数表示答案四舍五入到 ...
分类:
其他好文 时间:
2018-03-20 20:41:40
阅读次数:
203
poj 1741 Tree(树的点分治) 给出一个n个结点的树和一个整数k,问有多少个距离不超过k的点对。 首先对于一个树中的点对,要么经过根结点,要么不经过。所以我们可以把经过根节点的符合点对统计出来。接着对于每一个子树再次运算。如果不用点分治的技巧,时间复杂度可能退化成$O(n^2)$(链)。如 ...
分类:
其他好文 时间:
2018-03-07 20:18:06
阅读次数:
181
题目描述 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000 输入 第一行 两个整数 n, k第二..n行 每行三个整数 表示一条无向边的两端和权值 (注意点的编号从0开始) 输出 一个整数 表示最小边数量 如果不存在这样的路径 输 ...
分类:
其他好文 时间:
2018-01-03 21:09:47
阅读次数:
229
"原题" 给出一颗树,求有多少条路径满足路径上的权值和是3的倍数,输出答案比n的最简分数。 大概是树的点分治的模板题啊。 用重心把树分治,在“合并”的过程中求经过重心的权值和为3的倍数的路径条数。 calcg用bfs每次求出重心,calc用于处理每个点到当前根的距离。 ans每次先加上当前所在树的c ...
分类:
其他好文 时间:
2017-12-18 14:15:34
阅读次数:
153