题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3720题解:传说中的块状树。。。和链剖思想差不多,能塞到父亲块里的就塞,否则自己新开一块。只是比较纠结树分块究竟用什么?如果是树上莫队的话好像不能这么分?被菊花卡死?然后我们就每个块暴力维护信息。...
分类:
其他好文 时间:
2015-01-25 20:47:42
阅读次数:
118
学习这位神犇的:http://blog.csdn.net/jiangyuze831/article/details/41476865注意:①排序时第一关键字是左端点所在块编号(块状树),第二关键字是右端点dfs序。②维护的当前链不能包括lca(l,r),但最后要计算上lca(l,r)的答案。③对l-...
分类:
移动开发 时间:
2015-01-25 13:50:04
阅读次数:
255
题目大意:给定一棵树,每个节点有一个颜色,多次询问某条路径上颜色数量,强制在线
正解是块状数组,强制在线莫队会TLE到死,想AC这道题的不用看了
如果朴素的跑树上莫队其实并不难- - 但是强制在线
因此我们可以考虑强制在线莫队算法
将树分成O(n^1/3)块,每块大小O(n^2/3)
记录每两块之间的答案、每种颜色的出现次数和哪些点被记录到了答案中
每次查询先找到两端点所在块的端点的答...
分类:
编程语言 时间:
2015-01-16 16:42:48
阅读次数:
857
题目大意:给定一棵树,要求将这棵树分成一些块,使每块大小在[B,3B]之间
《手把手教你块状树系列》
- -终于搞懂这题怎么做了
- -去网上扒了个代码居然是错的 坑死我了
- -还好题解的思想是对的
朴素的分块方式是贪心 能加就加 这种方法存在着严重的效率问题 可以被菊花卡成O(n)块
因此我们可以为其它的块预留位置 如果一块大小刚好>=b 就将这坨东西分成一块
首先任选一点开始深...
分类:
其他好文 时间:
2015-01-16 10:10:10
阅读次数:
128
题目大意:给定一棵树,每个点有一个颜色,提供两种操作:
1.询问两点间路径上的Σv[a[i]]*w[k],其中a[i]代表这个点的颜色,k表示这个点是这种颜色第k次出现
2.修改某个点的颜色
VfleaKing的题解见 http://vfleaking.blog.163.com/blog/static/174807634201311011201627/
带修改莫队上树……如果不带修改就正常...
分类:
其他好文 时间:
2014-11-27 14:37:22
阅读次数:
222
题目大意:同3720 增加了一个操作 即删除一个点与父亲节点的连边
3720题解见 http://blog.csdn.net/popoqqq/article/details/41481439
断开一个节点与父节点的连边时
如果这个点是所在块的根节点,直接断掉就行
如果这个点不是所在块的根节点,那么就要把这个块分裂,这个点以及在块中的子树都分裂到新的块中,细节讨论较多不大好写0.0
然...
分类:
其他好文 时间:
2014-11-26 14:20:04
阅读次数:
218
题目大意:维护一棵树,每个点有一个权值,提供下列操作:
1.询问某棵子树中有多少个节点的权值大于x
2.修改某个节点的权值
3.增加一个叶子节点
强制在线
传说中的树分块
首先DFS,对于每个节点,如果这个节点的父亲节点所在块未满,就塞进父节点所在块中,否则自成一块,然后与父节点所在的块连边
然后就按照分块直接搞吧0.0 细节实在是太多了 所以写挂的地方看看本蒟蒻的代码就好了0.0...
分类:
其他好文 时间:
2014-11-25 16:38:40
阅读次数:
195
在线块状树LCA模板。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define N 30001 7 vectorG[N]; 8 typedef vector::iterator ITER; 9 int ...
分类:
其他好文 时间:
2014-11-06 14:17:54
阅读次数:
482
分块LCA什么的,意外地快呢……就是对询问的3个点两两求LCA,若其中两组LCA相等,则答案为第三者。然后用深度减一减什么的就求出距离了。 1 #include 2 #include 3 #include 4 using namespace std; 5 #define maxn 500001 6 ...
分类:
其他好文 时间:
2014-10-29 16:28:09
阅读次数:
205