----树链剖分/dfs序
文章平均质量分 50
扩展的灰
扩展的灰(Extended Ash)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Jzoj3717【NOI2014模拟7.2】火车
很显然的树剖题目嘛,加上个区间打标记即可,可以用树状数组 注意数据很坑,dfs爆栈,所以要从最中间开始dfs原创 2017-09-27 21:27:48 · 779 阅读 · 0 评论 -
CDQ分治&整体二分九连测
整体二分好难a CDQ分治&整体二分九连: A[适者] 先来一个不是cdq分治的题(虽然也可以用分治做) 首先先来考虑按照什么顺序来搞掉这些机甲 对于两个相邻的机甲i,j,先i后j的代价是Ai∗Di+(Di+Dj)∗AjAi∗Di+(Di+Dj)∗AjA_i*D_i+(D_i+D_j)*A_j 那么如果i应该比j先消灭就有 Ai∗Di+(Di+Dj)∗Aj<A...原创 2018-08-19 21:32:06 · 701 阅读 · 0 评论 -
Jzoj5665 奥立卡的诗
终于又遇到SAM的题了好好玩,而且就这道题让我弄清楚了广义SAM和Trie上SAM的区别 其实两者是没有多少区别的,不过Trie上SAM可以更快 关于Trie上SAM,是用bfs的方法来构建的,相比起广义SAM用dfs建少了一个深度之和的部分 但是如果原题给的就是Trie那么就只能用bfs了,因为dfs会被卡成O(n^2) (考虑一个扫把) 回到本题,简化一下式子发现这道题求的是不同子串的原创 2018-04-20 21:18:25 · 327 阅读 · 0 评论 -
51Nod1679 连通率
题目看这里 一个简单的计数问题 我们先考虑O(n^2)的做法 对每个点dfs一次,求出d[i]表示i的深度,那么对答案贡献就是Σ2^(n-d[i]) 那么我们考虑用数据结构动态维护这个d[i],显然可以用线段树来维护dfs序做到 复杂度O(n lg n) 效率很高rank8 看了下solution突然才发现别人都不是这么做的! 不管了反正跑得过而且跑的快。。就是代原创 2018-02-22 21:51:15 · 310 阅读 · 0 评论 -
Jzoj4348 打击目标
又是被水题坑了。。。 一直想不出来看题解说要什么主席树,于是开始打离线算法 结果打到一半发现要强制在线。。No!!! 发现直接AC自动机似乎可做?树剖之后在AC自动机上跑的时候判断一下不就好了吗!连线段树都不要 让后快乐切掉,速度还可以(废话,人家N^2暴力都跑得飞快) #pragma GCC opitmize("O3") #pragma G++ opitmize("O3") #in原创 2017-12-30 21:32:38 · 423 阅读 · 0 评论 -
Jzoj3625 旅行(travel)
非常好的树剖模板题了,直接C颗线段树上去就好了,动态开点一次写对~ #pragma GCC opitmize("O3") #pragma G++ opitmize("O3") #include #include #include #define N 100010 #define mid (l+r>>1) using namespace std; struct edge{ int v,nt;原创 2017-12-13 20:29:24 · 462 阅读 · 0 评论 -
Jzoj4895 三部曲
因为外来的入侵,国王决定在某些城市加派士兵。所有城市初始士兵数量为0。当城市 被加派了k名士兵时。城市i的所有子城市需要被加派k+1名士兵。这些子城市的所有子城市需要被加派k+2名士兵。以此类推。 当然,加派士兵的同时,国王也需要不断了解当前的情况。于是他随时可能询问以城市i为根的子树中的所有城市共被加派了多少士兵。 你现在是国王的军事大臣,你能回答出国王的每个询问么? 我们先求出dfs原创 2017-11-03 17:17:12 · 397 阅读 · 0 评论 -
一些基础算法的模板(持续更新)
更新中 //Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft //To be continued... //Suffix Automation char str[N]; int s[N][26],mx[N],f[N],sz[N]; int last=1,cnt=1,n,v[N],r[N],ans=0; inlin原创 2017-10-25 22:05:58 · 3825 阅读 · 0 评论 -
Jzoj5462【NOIP2017提高A组冲刺11.8】证书
Pulumi生活在P城的角落,而他的朋友们gjdy,oyski,tutuwai等等生活在P城的靠中心位置。 P城很大,但它拥有优秀的城市结构,同时P城重视文化教育的发展,P城共有n个学校,校与校之间共建立了n-1条交通线路,且两所学校之间存在唯一的连通路径。 P城常常举行各种类型的评比活动,为了节约资金,最终将给某一条路径上的所有学校颁发证书。为了便于描述我们记一次评比活动的结果为(ui,vi原创 2017-11-08 15:56:42 · 1025 阅读 · 0 评论 -
Jzoj4846 行走
这个题一看就是树剖的模型 但是有一些问题,比如权值的乘机太大了,可能会爆long long 一种解决的方法:我们考虑到,v 对于权值为1的边我们可以用一个并查集合并(注意只会改小) 但是这种方法不好想,我们还是考虑树剖 若权值>=10^18 我们可以直接将其变为一个特殊的值(例如-1)表示“足够大”,这种情况直接输出0 若不够,我们有一个结论: [[a/b]/c] = [a/bc] 这原创 2017-10-30 22:05:52 · 390 阅读 · 0 评论 -
Jzoj5460【NOIP2017提高A组冲刺11.7】士兵训练
好长一道题结果发现就是个叫你求最大次大的东西 我们跑出dfs序和主席树后,开始分类讨论 1.只有一个节点 2.有不止两个最大值,且在此子树外有l[i]不为0的节点 3.只有一个最大值,而次大值+子树外l[i]的最大值不等于最大值 4.只有一个最大值,而次大值+子树外l[i]的最大值等于最大值,就取第三大值和最大值相加,和次大值和子树外次大值相加 (这里的次大和第三大都是严格的) 主席原创 2017-11-07 15:48:13 · 441 阅读 · 0 评论 -
Jzoj4604 树
子树的问题都是dfs序的工作啦,加上个线段树就ok了 #include #define mid (l+r>>1) struct Edge{ int v,nt; } G[200010]; int h[100010],cnt=0,clk=0,l[100010],r[100010]; int s[400040],n,m,d[100010]; char c[5]; void adj(int x,in原创 2017-10-07 22:01:34 · 474 阅读 · 0 评论 -
Jzoj4603 颜料大乱斗
看了一眼就开始想分快树套树莫队了吧?233333333 但是这道题有一个奇怪的条件!颜色不超过30种! 是不是一个状压就完了?23333333333333333333 #include #define ls x #define rs x #define mid (l+r>>1) int s[400040],t[400010],n,m,c; void pushdown(int x){ i原创 2017-10-07 21:54:47 · 428 阅读 · 0 评论 -
Jzoj3898 树的连通性
题意:给一棵树,每次删边或者询问连通性,强制在线 其实这题做法很多嘛,简单说一下 一眼看过去肯定是LCT啦,于是马上开始打 打到一半发现似乎不用LCT?好像树剖也可以嘛 结果发现树剖也不用,直接一个dfs序就可以了嘛 用线段树维护每个点能到达的最远的祖先,删边的时候将整个区间覆盖即可 注意,对于在子树中已经断开的节点不要再覆盖,可以记录每个节点深度 #pragma GCC opi原创 2017-10-03 19:37:42 · 475 阅读 · 0 评论 -
Jzoj3883 线段树
题意:给你一颗树,每次选择一条简单路径进行染色,问最后每条边的颜色 此题非常之坑,各种卡,主要是卡栈空间 首先看题就写了个树剖,让后各种TLE和RE,开了O3还是不行 #pragma GCC opitmize("O3") #pragma G++ opitmize("O3") #pragma comment(linker, "/STACK:102400000,102400000") #i原创 2017-10-03 16:58:17 · 339 阅读 · 0 评论 -
Bzoj2434 阿狸的打字机
纪念一次AC,水一篇blog 又是喜闻乐见的广义SAM题辣 题意:给一个trie,每次问询一个串在另一个串出现的次数 思路:建立广义SAM,离线所有询问,每次讲一个主串在fail树上的节点+1,处理询问就用fenwick维护子树和 这里注意, 1.广义SAM要用bfs建 2.每次从一个主串到下一个时,不要整个都减掉而是要在LCA处会和,这样复杂度就是对的 代码有点长但是很好打 #include&...原创 2018-11-26 21:12:32 · 342 阅读 · 0 评论
分享