摘要:
Splay 每个节点维护一个区间。 1 /************************************************************** 2 Problem: 3595 3 User: idy002 4 Language: C++ 5 ... 阅读全文
摘要:
1 /************************************************************** 2 Problem: 2152 3 User: idy002 4 Language: C++ 5 Result: Accep... 阅读全文
摘要:
对每个重心保存,依次遍历子树,记录下距离为d的深度最小的路径,在遍历时用遍历过的其它子树更新答案。收获:对于当前子树,可以写两个遍历函数,一个用于更新答案,一个用于更新维护的信息。 1 /*******************************************************... 阅读全文
摘要:
终于自己独立A了一道点分治。点分治的题目和树规的题目很像,都是在树上乱搞,但点分治一般和路径更相关,如果用树规做会感觉冗余状态太多,内存和时间都无法承受,如果不用动态规划,直接在原树上运用这道题的方法,又无法保证时间复杂度(点分治让我们的算法对原树的形态依赖更小,可以保证时间复杂度)。 1 /**... 阅读全文
摘要:
第三道点分治。首先找到黄学长的题解,他叫我参考XXX的题解,但已经没有了,然后找到另一个博客的简略题解,没看懂,最后看了一个晚上黄学长代码,写出来然后,写暴力都拍了小数据,但居然超时,。。。。然后改了一下存图方式,还是T,读入优化,还是T,最后把BFS找重心改成DFS找重心后才过的(因为DFS只遍历... 阅读全文
摘要:
大概思路:树点分治,重心树中每个重心维护一个总的平衡树,树中保存属于该重心的点到该重心的距离,然后对于去掉该重心后形成的子树分别再保存一份。用这种方式实现的话,还可以支持修改与多次查询,每次操作都是O(logn*logn)感悟:点分治正如一个前辈说的,是“借助”重心的力量,来维护与查询与某点距离相关... 阅读全文
摘要:
第一道树的点分治。感谢:http://blog.csdn.net/u013368721/article/details/40887575首先,找出原图的重心(最大子树大小最小的点(如果作为根)),去掉它后原图就分成了若干的森林,再在对应的森林中找出重心,递归这个过程(只有一个点时返回)。这样,我们就... 阅读全文
摘要:
先将问题转化为带修改的求区间小于某数的数的数量,然后用树状数组套值域线段树解决。注意: 1、值域线段树要包括0 1 /************************************************************** 2 Problem: 2120 3 ... 阅读全文
摘要:
f[pos][top]统计数字个数g[pos][top][digit]统计数位(对于f[pos][top]中的所有数) 1 /************************************************************** 2 Problem: 1833 3 ... 阅读全文
摘要:
很久以前做过的一道数位DP,现在用一种新的解决数位DP的比较一般的方法。数位DP裸题是:求[L,R]有多少个数。先转化成求[0,R]有多少个数,然后区间相减即可。对于[0,R]中的所有数,用0补齐前面的空位,使得每个数的长度都为R的长度。状态:dp[pos][0]表示从最高位到pos位,没有顶上界的... 阅读全文