树链剖分
文章平均质量分 53
alan_cty
蒟蒻一只
别打脸(⊙o⊙)哦
展开
-
【SDOI2014】旅行
Description给出一个n个点的数,和m次操作。每个点有颜色和权值。 每次操作分4种 1:修改一个点的颜色 2:修改一个点的权值 3:询问从x到y的路径上,和x相同颜色的点的权值和(保证x,y同颜色) 4:询问从x到y的路径上,和x相同颜色的点的权值最大值(保证x,y同颜色) n,m<=10^5,颜色<=10^5,权值<=10^4Solution首先,很容易想到链剖(蒟蒻表示并不会原创 2016-03-31 19:11:35 · 1402 阅读 · 0 评论 -
[51nod2004]终结之时
Description“将世界终结前最后的画面,深深刻印进死水般的心海.” 祈愿没有得到回应,雷声冲破云霄,正在祈愿的洛天依受到了极大的打击。 洛天依叹了口气,说:”看来这个世界正如我之前所说的一样,早已失去一切生机” 你沉默了下来,没有说什么话,只是静静地坐在洛天依的身旁,一同观赏这末日之景. 天空被云朵覆盖,一朵具有强大能量的云映入你们的眼帘,这是始云!是抽取世界能量的最重要的一朵云!但原创 2018-03-06 16:58:06 · 297 阅读 · 0 评论 -
【清华集训2017模拟12.10】回文串
DescriptionNYG 很喜欢研究回文串问题,有一天他想到了这样一个问题: 给出一个字符串 S,现在有 4 种操作: • addl c :在当前字符串的左端加入字符 c; • addr c :在当前字符串的右端加入字符 c; • transl l 1 r 1 l 2 r 2 :取出 S 的两个子串 S[l 1 …r 1 ],S[l 2 …r 2 ],现在 NYG想把前一个字符串变换为后原创 2017-12-09 21:39:36 · 685 阅读 · 0 评论 -
[CF 555E] Case of Computer Network
Description给出一个n个点,m条边的无向图。你要确定每一条边的方向,使得所有q个要求(s,t)都能从s出发到达t。 输出是否能完成所有要求。 n,m,q<=2*10^5Solution显然,对于同一个点双里面的点,都是至少有两种方法可达的。 也就是双联通缩点喽~ 然后缩完点就是棵数。Nlog2NN \log^2 N 用两个方向的链剖维护,线段树打上标记,判断是否冲突NlogNN原创 2016-10-05 16:07:45 · 669 阅读 · 0 评论 -
【SDOI2011】染色
Description给出一棵树,每个点有颜色。 m次操作,每次操作把一条路径上的颜色都修改成c, 或询问一条路径上的颜色段数。 n,m<=10^5Solution简单的链剖题。 每个区间维护颜色段数和左右端点的颜色就好了。 然而这道题会爆栈!!! 于是我方了~~ 然后就滚回去写LCT了。 为了练手我就写了个静态LCT(然并卵) 然后发现x=y时跪了。。。 有点奥妙重重啊233C原创 2016-09-07 20:17:26 · 1065 阅读 · 0 评论 -
【GDOI2016模拟3.15】染色
Description给出一棵树,初始时所有点都是白色。每次操作把一个点染黑,或是询问所有黑点到这个点的距离和。 n,m<=10^5Solution首先,答案是∑i是黑色dis[i]+dis[x]−dis[lca(i,x)]\sum_{i是黑色}{dis[i]+dis[x]-dis[lca(i,x)]} 那么我们知道了所有黑色点的距离和,和黑色点的个数,剩下的就 和[bzoj3626][LNO原创 2016-06-15 21:22:03 · 1487 阅读 · 0 评论 -
[bzoj3626][LNOI2014]LCA
Description给出一棵树,q次询问,每次询问∑i=lrdeep(lca(i,z))\sum_{i=l}^{r}deep(lca(i,z)) n,q<=5*10^4Solution这道题在线明显不可做。(在线A了的大犇请收下我的膝盖) 首先,我们来思考一下,一组询问怎么做? 暴力的想法,我们把每要询问的点往上都打上标记,然后把z点往上找到每个标记第一次出现的位置。 其实我们可以发现,每原创 2016-06-12 21:08:12 · 1666 阅读 · 4 评论 -
GDOI 2016 Day1 T4 疯狂动物城
Description给出一个N个节点的数,和M次操作。每次操作的类型如下: 1,x,y,z,将x到y的路径上的ai加上z 2,x,y,询问x到y的路径上,ai*(1+2+..+n-i)的和 3,x,将所有的a变更回第x次修改之后的状态。 强制在线。 N,M<=10^5.Solution码农题(hehe) 愉快的农民生活 先考虑一下序列上的问题。 Ans=∑i=1nai∗(n−i+1原创 2016-05-17 20:19:59 · 1045 阅读 · 0 评论 -
【GDOI2014模拟】雨天的尾巴
Description给出一个n个节点的树和m次操作,每次操作把x到y的路径上的所有的点的z种物品+1. 求最后每个点最多的物品编号。若有多个相同的取编号小的,若没有则输出0. n,m<=10^5,z<=10^9Solution首先,这道题并没有在线和离线之分,所以可以任意乱搞。 我们把所有z离散化,这样就只有m种取值。 那么对于一次操作,我们相当于做一次线段覆盖,在x+1,y+1,lca-原创 2016-05-25 19:07:06 · 654 阅读 · 0 评论 -
【GDOI2016模拟4.23】轻重路径
Description树链剖分都会吧? 维护一个二叉树的链剖,若size()相同选左子树。 每次删除一个叶子节点,若出现size()相等保持原有的剖法。 每次询问所有重边所指向的点的编号和。 n<=2*10^5Solution用链剖来维护链剖。(高级,用splay维护splay) 发现每一个点都必属于一条重链,于是就用总和-链顶和就是答案。 那么我们用线段树维护每一段区间的链顶和T,和每原创 2016-04-26 19:44:46 · 672 阅读 · 0 评论 -
树链剖分模板
树链剖分(两遍dfs)void dfs(int x,int y) { size[x]=1;fa[x]=y;d[x]=d[y]+1;int k=0; rep(i,x) if (t[i]!=y) { dfs(t[i],x);size[x]+=size[t[i]]; if (size[t[i]]>k) k=size[t[i]],son[x]=t[i];原创 2016-03-28 19:34:00 · 1073 阅读 · 0 评论 -
树链剖分学习小记
树链剖分在处理一类在树上修改,查询的问题时,我们往往需要把这棵树剖分成一个序列。然后利用数据结构在这个序列上把你所需要的东西一段一段地查出来。但如果剖分方法不得当的话,每一次查询就可能只查询了一个点,时间复杂度还不如暴搜!因此我们需要一个优秀的算法来帮助我们进行剖分,这就是树链剖分(启发式剖分,轻重链剖分)。我们把每一个点最大的儿子叫做重儿子,其余的叫做轻儿子。连接重儿子的叫做重边,其余的叫做轻边。原创 2016-03-09 19:59:19 · 955 阅读 · 0 评论 -
【ZJOI2008】树的统计
Description给出一棵n个节点的树,和m个操作。每个点有点权,操作有单点修改,树上路径和和树上路径最大主三种。n<=30000,m<=200000,-30000<=权值<=30000。Solution裸的树链剖分。不多解释。 树链剖分学习小记Code#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b原创 2016-03-09 19:45:28 · 885 阅读 · 0 评论 -
【GDOI2103模拟3.17】数树数
Description给出一个n个节点的树,每个点有权值。给出m次操作,每次操作修改一个点的权值或者询问从x到y的路径上有多少个权值为z的点。 nSolution话说2103年的题真的很鬼畜。 链剖like[SDOI2012旅行],还更简单。好像有把权值重复赋值的操作。原创 2016-03-31 19:19:39 · 705 阅读 · 0 评论 -
[BZOJ5404]party
Description给定一棵以1为根的树,第i个点有第ai种商品。 有c个人要从b1~bc点出发,到其lca处集合,每个人只能带其经过的点的商品,且需要满足: 1:每个人带的商品的数量相同 2:所有人带的商品必须两两不同 3:最大化所有人带的商品的数量。 q次询问,设商品种类为m n<=300000,q<=50000,m<=1000,c<=5Solut...原创 2018-08-17 22:08:34 · 867 阅读 · 0 评论