----树链剖分/dfs序
文章平均质量分 50
扩展的灰
扩展的灰(Extended Ash)
展开
-
Jzoj3717【NOI2014模拟7.2】火车
很显然的树剖题目嘛,加上个区间打标记即可,可以用树状数组注意数据很坑,dfs爆栈,所以要从最中间开始dfs原创 2017-09-27 21:27:48 · 663 阅读 · 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 · 571 阅读 · 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 · 262 阅读 · 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 · 247 阅读 · 0 评论 -
Jzoj4348 打击目标
又是被水题坑了。。。一直想不出来看题解说要什么主席树,于是开始打离线算法结果打到一半发现要强制在线。。No!!!发现直接AC自动机似乎可做?树剖之后在AC自动机上跑的时候判断一下不就好了吗!连线段树都不要让后快乐切掉,速度还可以(废话,人家N^2暴力都跑得飞快)#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#in原创 2017-12-30 21:32:38 · 373 阅读 · 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 · 399 阅读 · 0 评论 -
Jzoj4895 三部曲
因为外来的入侵,国王决定在某些城市加派士兵。所有城市初始士兵数量为0。当城市 被加派了k名士兵时。城市i的所有子城市需要被加派k+1名士兵。这些子城市的所有子城市需要被加派k+2名士兵。以此类推。当然,加派士兵的同时,国王也需要不断了解当前的情况。于是他随时可能询问以城市i为根的子树中的所有城市共被加派了多少士兵。你现在是国王的军事大臣,你能回答出国王的每个询问么?我们先求出dfs原创 2017-11-03 17:17:12 · 347 阅读 · 0 评论 -
一些基础算法的模板(持续更新)
更新中//Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft//To be continued...//Suffix Automationchar 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 · 3734 阅读 · 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 · 961 阅读 · 0 评论 -
Jzoj4846 行走
这个题一看就是树剖的模型但是有一些问题,比如权值的乘机太大了,可能会爆long long一种解决的方法:我们考虑到,v对于权值为1的边我们可以用一个并查集合并(注意只会改小)但是这种方法不好想,我们还是考虑树剖若权值>=10^18 我们可以直接将其变为一个特殊的值(例如-1)表示“足够大”,这种情况直接输出0若不够,我们有一个结论: [[a/b]/c] = [a/bc] 这原创 2017-10-30 22:05:52 · 324 阅读 · 0 评论 -
Jzoj5460【NOIP2017提高A组冲刺11.7】士兵训练
好长一道题结果发现就是个叫你求最大次大的东西我们跑出dfs序和主席树后,开始分类讨论1.只有一个节点2.有不止两个最大值,且在此子树外有l[i]不为0的节点3.只有一个最大值,而次大值+子树外l[i]的最大值不等于最大值4.只有一个最大值,而次大值+子树外l[i]的最大值等于最大值,就取第三大值和最大值相加,和次大值和子树外次大值相加(这里的次大和第三大都是严格的)主席原创 2017-11-07 15:48:13 · 374 阅读 · 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 · 409 阅读 · 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 · 379 阅读 · 0 评论 -
Jzoj3898 树的连通性
题意:给一棵树,每次删边或者询问连通性,强制在线其实这题做法很多嘛,简单说一下一眼看过去肯定是LCT啦,于是马上开始打打到一半发现似乎不用LCT?好像树剖也可以嘛结果发现树剖也不用,直接一个dfs序就可以了嘛用线段树维护每个点能到达的最远的祖先,删边的时候将整个区间覆盖即可注意,对于在子树中已经断开的节点不要再覆盖,可以记录每个节点深度#pragma GCC opi原创 2017-10-03 19:37:42 · 398 阅读 · 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 · 286 阅读 · 0 评论 -
Bzoj2434 阿狸的打字机
纪念一次AC,水一篇blog又是喜闻乐见的广义SAM题辣题意:给一个trie,每次问询一个串在另一个串出现的次数思路:建立广义SAM,离线所有询问,每次讲一个主串在fail树上的节点+1,处理询问就用fenwick维护子树和这里注意,1.广义SAM要用bfs建2.每次从一个主串到下一个时,不要整个都减掉而是要在LCA处会和,这样复杂度就是对的代码有点长但是很好打#include&...原创 2018-11-26 21:12:32 · 261 阅读 · 0 评论