题目链接第一次写树分治、找重心,还是不太理解hzwer:考虑经过根的路径,依次处理其子树,维护平衡树.对于第S棵子树其每个结点x,在平衡树中查询出发点为根,终点在S-1子树中,小于K-dis[x]+1的路径数量num,ans+=num再用S更新平衡树 1 #include 2 #include .....
分类:
其他好文 时间:
2016-01-23 18:13:39
阅读次数:
124
传统的树分治,不能处理在线的询问。我们可以把每次点分治的重心和它分割出的子树的重心连接,容易发现形成了一颗新的树。这棵树有哪些性质呢?首先,树高不超过log(n),其次,一个节点原子树中的所有节点,依然在新树里它的子树中。因为树高只有log(n),所以我们考虑从一个点出发的路径时,可以枚举它到新树中...
分类:
其他好文 时间:
2015-12-30 13:42:10
阅读次数:
150
题意 n个点组成一棵树, 带有点权。 求最长不降的路径的长度, 且路径上最大值最小值之差不超过D。显然是树分治, 但是分治之后如何维护答案呢。假设当前重心为g, 分别记录g出发不降路径的长度,以及最大值, 和不升路径的长度以及最小值。这里用到一个map和二分, 线段树也可以, 但是如果用线段树还要考...
分类:
其他好文 时间:
2015-11-28 00:56:54
阅读次数:
232
题意:
给出一棵n个结点的树,边上有权值;
对于每个点求离它第k小的距离;
n
题解:
正解似乎是树分治维护距离,然后二分答案啥的,时间复杂度O(nlog^3);
但是如果想不到树分治怎么办呢?那么就来写一个逗比做法吧!
考虑从一个点转移到另外一个点,这个转移过程对于一些点是增加这条边的权值,另一些是减少这条边的权值;
而投影到DFS序上,就是对于子树区间的加减修改;
从...
分类:
其他好文 时间:
2015-11-26 15:22:22
阅读次数:
428
树分治。对于一棵子树的根节点,至少有一条边与儿子相连的属于重边。对于一条轻边,它的贡献值是两端子树大小的乘积,所以,重边应该是贡献值最大的一边。至于要求所有的点,进行深度优先搜索,因为移动一个点只会影响两个点的两个子树,这个可以维护。在进行DP时,选择计算最大的重边的值,答案就是用所有的边贡献值减去...
分类:
其他好文 时间:
2015-11-12 01:14:39
阅读次数:
320
最大连续和Time Limit: 1000 MSMemory Limit: 32768 KTotal Submit: 61(13 users)Total Accepted: 15(9 users)Rating: Special Judge: NoDescription给出一个长度为n的整数序列D,你...
分类:
其他好文 时间:
2015-11-10 13:45:19
阅读次数:
316
TreeTime Limit: 20 SecMemory Limit: 256 MB题目连接http://poj.org/problem?id=1741DescriptionGive a tree with n vertices,each edge has a length(positive int...
分类:
其他好文 时间:
2015-11-08 19:28:09
阅读次数:
256
LRIPTime Limit: 10000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu解题:树分治参考了Oyking大神的解法我们用map维护上升序列,first表示value,second表示长度,按first由小到大,second.....
分类:
其他好文 时间:
2015-10-25 00:57:53
阅读次数:
313
这题说的给了一颗树 然后树上有一些整数值,分别由他给的那30个素数组成,有多少条路径的路径上的点的乘积为立方数, 把每个数分解成相应的素数模3后的值,然后压缩为一个3进制的数然后进行树的分支#include #include #include #include #include #include u...
分类:
其他好文 时间:
2015-10-07 14:43:03
阅读次数:
265
题意:求树上的一条费用不超过m的路径,使得总长度尽量大。人参第一发树分治,紫书上思路讲得比较清晰,这里不再赘述。实现的时候,用一个类似时间戟的东西,记录结点首次访问的时间,并保存结点序列。合并的时候用直接map。和Defense Lines差不多#includeusing namespace std...
分类:
其他好文 时间:
2015-10-07 14:38:27
阅读次数:
658