树链剖分
HelloWorld10086
追随大神的脚步
展开
-
HDU 3966 Aragorn's Story(树链剖分+线段树区间更新+手动扩大内存)
题意: 给一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路径上的所有点权值加上K D C1 C2 K:把C1与C2的路径上的所有点权值减去K Q C:查询节点编号为C的权值解析: 典型的树链剖分题目,先进行剖分,然后用线段树去维护即可。注意: HDU的OJ采用Windows系统,容易爆栈,所以在代码中加入汇编手动扩大内存。mym原创 2015-07-22 16:11:38 · 802 阅读 · 0 评论 -
BZOJ 2243 染色(树链剖分+线段树区间更新)
题意: 中文题意不解释了。解析: 用树链剖分求解该题。 在线性序列用线段树里面怎么维护颜色段。其实很简单,每个线段树的节点位置记录三个值: lc:这段区间最左端的颜色;rc:这段区间最右端的颜色;sumv:这段区间里面的颜色数。 那么进行区间合并的时候,就可以: sumv[o]=sumv[ls]+sumv[rs]−(rc[ls]==lc[rs]);sumv原创 2015-07-24 14:15:37 · 546 阅读 · 0 评论 -
SPOJ 375 Query on a tree (树链剖分+线段树)
题意: 给出一棵树,有两种操作: 询问[u,v][u,v]的最大权值 然后更改第ii条边的权值为valval解析: 这是树链剖分的入门题,昨天调试了半天才做出这题,我还是太弱了。>但是还是弄懂了什么是树链剖分 树链剖分有先要进行两次dfs操作进行初始化。 第一个初始化操作,求得是每个节点的开头fa[u],每个节点的深度deep[u],以及每个节点的重儿子so原创 2015-07-22 10:47:45 · 606 阅读 · 0 评论 -
hdu 5452 Minimum Cut(树链剖分+差分前缀和)
题意: 给一个无向图和它的一个生成树,要求找到一个最小割,使得有且只有一条生成树上的一条边属于割集。解析: 因为生成树中只有一条边属于割集,那么割对生成树来说只是分成了两个子树,那么就考虑割生成树上割哪条边是最优的。 首先对生成树进行建树剖,对于每条非树边的两个端点u和v,对 u –> v 在生成树上的简单路径上的边权值加一,最后找到所有边权值最小的边,就是属于最小割的边。原创 2015-09-22 20:01:11 · 1166 阅读 · 0 评论