![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dfs序
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
-
【校内模拟】覆盖(DFS序)(二维数点)
简要题意:给一棵树和若干条路径,请你求出选择两条不同的路径,它们存在覆盖关系的概率。题解:一条路径可以根据两边两个点的DFS序描述成二维平面上的一个点。一条路径覆盖另一条可以转化为该路径对应的二维平面点在某个矩形中。二维数点瞎写即可,特殊处理一下路径一模一样的情况,不过不清楚数据卡没卡这个。代码:#include<bits/stdc++.h>#define ll l...原创 2020-04-14 15:25:16 · 185 阅读 · 0 评论 -
2019.04.01【校内模拟】Cac(圆方树)(DFS序)
传送门解析:仙人掌上路径问题考虑转换为圆方树上的问题。将所有点双和割边改造为方点会让这道题好写一点。现在考虑一条圆方树上的路径。考虑对所有方点维护加法标记,表示它的所有亲儿子的权值需要加上多少。加法标记对圆点无效。显然当路径LCA是方点的时候我们需要特殊处理一个圆点,拿一个桶来记录单独加了多少,每次修改只会有O(1)O(1)O(1)次这种操作,不会影响复杂度。对于询问我们在桶里面...原创 2019-04-01 21:37:19 · 191 阅读 · 0 评论 -
【YNOI2017】【BZOJ4867】舌尖上的由乃(分块)(DFS序)
传送门解析:代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ inline char get_char(){ static cs int Rlen=1<<20|1; ...原创 2019-04-17 12:06:05 · 223 阅读 · 0 评论 -
【NOI2011】【BZOJ2434】【洛谷P2414】阿狸的打字机(AC自动机)(DFS序)(树状数组)
洛谷传送门BZOJ传送门题解:随手建立一个AC自动机,我们发现每个询问实际上就是问xxx的结尾在failfailfail树上的子树中有多少个点在传yyy上。于是我们有一个办法对于任意的iii,快速处理所有y=iy=iy=i的询问,只需要将这个串在Trie树上的所有点权值设置为1,然后对于所有的xxx,询问子树和就行了。由于这个AC自动机整体的大小是有保证,我们把所有询问挂在对应yyy上...原创 2019-07-15 14:19:17 · 119 阅读 · 0 评论 -
【CF414E】Mashmokh's Designed Problem(ETT)
传送门题解:很好写,一发AC,CFrk6。MD,CF上排我前面的全部写的是指针,CF评测机好像是32位的,指针跑得飞快这是个动态树问题,奇怪的询问显然不好用LCT搞,考虑ETT,(也就是Splay维护括号序列)。第一个询问,我们可以方便地维护两个点的深度,问题在于求LCA的深度,括号序列好像内部刚好不包含LCA。。。然而我们知道[in[u],in[v]][in[u],in[v]][in...原创 2019-09-06 16:36:19 · 219 阅读 · 0 评论 -
【校内模拟】fibonacci(斐波那契通项公式)(DFS序)(树状数组)(树上差分)
题面见校内OJ4695题解:首先利用斐波那契通项公式转化为等比数列求和。然后树上差分,考虑修改对询问的贡献,发现有一部分与询问点的深度无关,另一部分有关,分开维护即可。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs cons...原创 2019-09-07 23:10:35 · 170 阅读 · 0 评论 -
【BZOJ3306】树(树剖换根)(ZKW线段树)
传送门老年选手复习树剖换根,无题解。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ static cs int Rlen=1<<22|1; static char buf...原创 2019-09-09 10:25:37 · 113 阅读 · 0 评论 -
【题目泛做】哲学题(DFS序)(Splay)
简要题意:树木仙有一棵根节点为 1的菊花树 (除 1 号节点外所有节点的父亲都是 1). 这棵树每个节点都有一个权值, 最开始 i 号节点的权值为 val_i .树木仙觉得菊花树不够美观, 决定修改这棵树. 树木仙每次会将编号在 [l,r] 之间的节点的父亲修改为x. 因此, 这棵树的形态会不断改变. 为了保证美观, 树木仙还会不断修改某个点的权值.为了证明你能维护这棵树, 在修改过程中树木...原创 2019-09-10 10:54:41 · 248 阅读 · 0 评论 -
【BZOJ5084】hashit(广义SAM)(DFS序)(树上差分)
传送门题解:这个做法在离线情况下可以做到O(26n+nlogn)O(26n+n\log n)O(26n+nlogn),强制在线可能会被卡成O(nn)O(n\sqrt n)O(nn),但是由于不用哈希,常数会比后缀平衡树做法小一点。首先建立广义SAM,那么某个时刻的答案实际上就是此时所有串在SAM上的节点到根节点的链的并,直接利用DFS序树上差分算一下答案即可。代码:#includ...原创 2019-10-10 09:53:45 · 178 阅读 · 0 评论 -
【ZJOI2019】语言(线段树合并)(DFS序)(虚树)(树上差分)
传送门题解:首先你还是要尝试各种做法,包括点分治,链剖等等。反正考虑点对统计的做法多得一批,也有很多能够做到O(n⋅poly(logn))O(n\cdot poly(\log n))O(n⋅poly(logn)),至于是log\loglog几次方就看具体做法了。但是换个思路可以做到一个log\loglog。对于一个点,考虑统计有多少个点能够到达它,答案实际上是所有覆盖它的链的并形...原创 2019-10-10 16:23:30 · 222 阅读 · 0 评论 -
【51nod1576】Tree and Permutation(树的重心)(DFS序)(树状数组)
传送门解析:有一点想法,考虑每条边被经过的次数,假设这条边将树给分为两个大小为x,yx,yx,y的联通块,则这条边的最大贡献为min(x,y)∗2\min(x,y)*2min(x,y)∗2,显然我们考虑给每个点尽量选择在另一边的点就行了。那么能不能让每条边的贡献达到可能的最大值呢?是可以的。发现我们算的min(x,y)\min(x,y)min(x,y)实际上就是以重心为根的时候,改变...原创 2019-04-04 10:25:23 · 240 阅读 · 0 评论 -
2019.03.21【ZJOI2007】【BZOJ1095】【洛谷P2056】Hide 捉迷藏(DFS序)(线段树)
BZOJ传送门洛谷传送门解析:其实就是QTREE4的弱化版,可以直接用QTREE4的解法来做。但是这道题有优秀的O(nlogn)O(n\log n)O(nlogn)做法。我们考虑利用DFS出的括号序列来处理距离。将点的编号塞到括号序列里面,那么两个点的距离就是它们中间的括号序列的非匹配括号数。证明因为极度弱智不想写了。现在考虑用线段树来维护这个括号序列。考虑如何得到横跨两个区...原创 2019-03-21 21:02:29 · 192 阅读 · 0 评论 -
2018.03.19【SPOJ-QTREE】Query on a tree(轻重链剖分)(线段树)(DFS序)
传送门过于基础不想写题解,写LCT写久了忘了树剖怎么写了来复习一下。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ inline char get_char(){ static c...原创 2019-03-19 20:44:04 · 139 阅读 · 0 评论 -
2018.09.25【BZOJ5338】【TJOI2018】Xor(DFS序)(LCA)(可持久化01TRIE)
传送门解析:解决异或问题的最好方式就是01Trie01Trie01Trie上贪心。。。这道题显然又是一个经典问题。思路:既然是询问xorxorxor多半要用01Trie01Trie01Trie,另外的可能是线性基。既然询问单点异或,那么就可以不用考虑线性基了。显然这是一个可持久化01Trie01Trie01Trie上贪心的问题。那么对于询问1,我们以DFSDFSDFS序建立一棵T...原创 2018-09-25 15:36:19 · 202 阅读 · 0 评论 -
2018.10.06【BJOI2015】【BZOJ4337】树的同构(括号序列)
传送门解析:其实这道题数据可以再大一点,再大一点的话,括号序列加个哈希就能过了。由于数据较小,我选择的是伪的最小表示法加上括号序列。思路:括号序列是DFSDFSDFS序的一个变种。在DFSDFSDFS进入一个点的时候,序列中加入一个“(”,再遍历完该节点的所有子树时候(即退出该节点时),序列中加入一个“)”。那么显然每一种括号序列唯一对应原来的树的形态。与标号无关,非常适合解决这道题...原创 2018-10-06 15:15:02 · 256 阅读 · 0 评论 -
2018.10.20【校内模拟】巧克力(TRIE)(DFS序)(树状数组)
传送门解析:神TM,OJ上又双叒叕卡栈空间,没办法手动开栈。。。思路:首先要发现一个性质,就是对于一个字符串,除了第一个#之前的前缀和最后一个#之后的后缀,其余部分是没有任何性质决定它的形态的。。。所以我们建立两颗TRIETRIETRIE树,直接将前缀和后缀插入到TRIETRIETRIE树里面,同时维护一下前缀TRIETRIETRIE上面的结尾位置在后缀TRIETRIETRIE上对应的...原创 2018-10-20 20:20:12 · 185 阅读 · 0 评论 -
2018.11.01【NOIP训练】图论(树上倍增)(线段树)(DFS序)(离线处理)
传送门解析:有一道差不多。但是我用了在线算法做的题:链接这里用一种好想的多的离线算法来做这道题。思路:其实还是断边,将一个询问变成两个来做显然需要断的是两个点路径中点。然后将询问分为两类处理,root=u,ban=vroot=u,ban=vroot=u,ban=v,uuu在vvv的子树中或不在vvv的子树中,其实就算v==lcav==lcav==lca,我们还是可以这样做,但是需要修...原创 2018-11-01 19:17:13 · 197 阅读 · 0 评论 -
2018.11.06【LOJ147】DFS序4(DFS序)(树状数组)
传送门解析:其实用DFSDFSDFS序可以将很多树剖能做的东西的复杂度优化一个log\loglog,不过需要一点小小的转化,因为DFSDFSDFS序只能处理子树问题。显然这道题直接用树剖做是O(nlog2n)O(n\log^2n)O(nlog2n)的,但是用纯粹的DFSDFSDFS序+树状数组可以做到O(nlogn)O(n\log n)O(nlogn)。思路;对于不同修改对每个询...原创 2018-11-06 18:14:21 · 950 阅读 · 0 评论 -
2018.11.05【校内模拟】相交(DFS序)(树状数组)(用来对拍的树链剖分)
传送门解析:首先怎么判断树上两个路径相交,其中一条路径的LCALCALCA必然在另外一条路径上。所以问题变成了,新增一条路径,询问有多少其他路径的LCALCALCA在它上面,询问它的LCALCALCA在多少其他路径上面。注意处理LCALCALCA重合的情况。这个显然的做法就是维护两个线段树,然后树链剖分维护路径加,单点求值和单点加,路径求值,注意“和”字分开的两个部分不能混为一谈。但是...原创 2018-11-05 15:54:33 · 162 阅读 · 0 评论 -
2018.11.05【NOIP2015】【洛谷2680】【UOJ#150】运输计划(二分答案+DFS序+树上差分)或(复杂度并不对(也不能过)的树链剖分)
洛谷传送门UOJ传送门解析:UOJ上的数据很强,复杂度不对过不了的,但是LCALCALCA如果是用倍增求的话也过不了(已经加了上界优化)。。。毕竟树剖常数小,复杂度还不满。。。思路:首先,不要试图化边为点,每条边的信息可以存在它所指向的儿子中。解法1:UOJ上不能过的树链剖分其实我们只需要考虑断掉哪些边就行了,显然断掉最长路径上以外的边是没有作用的,所以我们只需要考虑枚举断掉最长路...原创 2018-11-05 21:45:47 · 196 阅读 · 0 评论 -
2019.01.19【雅礼集训2019Day2T1】two(DFS序)(线段树)
描述你有两棵有根树,每棵各有 nnn 个顶点。让我们用整数 1 到 nnn 给每棵树的顶点编号。两棵树的根都是顶点 1。第一棵树的边都都是蓝色,第二棵树的边都是红色。简明起见,我们称第一棵树是蓝色的,以及第二棵树是红色的。当满足下面的两个条件下, 我们认为边(x,y)(x, y)(x,y) 有害于边(p,q)(p,q)(p,q):1.边(x,y)(x,y)(x,y)的颜色不同于边(p,q)...原创 2019-01-19 13:57:41 · 380 阅读 · 0 评论 -
2019.01.16【CodeForcesGYM100513】L. Useful Roads(支配树)(DFS序)
传送门解析:为什么这道题卡了我50多分钟?因为STL。。。我也不知道为什么,我把vector换成了stack后,减少了每次init清空vector的常数。然后我就从被卡常变成了跑得飞快?思路:这道题要求哪些边能够在以111开头的简单路径中出现。可以,这很不支配树。所以我们好好想想这个限制怎么转化。发现对于一个边&amp;lt;u→v&amp;gt;&amp;lt;u\righ...原创 2019-01-16 16:33:03 · 226 阅读 · 0 评论 -
【BZOJ5480】路径的条数(DFS序)(线段树维护扫描线)
传送门解析:考虑统计不合法的路径条数。令in[u]in[u]in[u]表示dfsdfsdfs序中,uuu的进入时间戳,out[u]out[u]out[u]表示退出时间戳。一个方案可以表示为点集的笛卡尔积,由于是无向的,所以我们只考虑in[u]&amp;lt;in[v]in[u] &amp;lt; in[v]in[u]&lt;in[v]的路径。一个限制可以表示为(a,ka)(a,ka)(...原创 2019-04-05 23:24:38 · 191 阅读 · 0 评论 -
2018.08.30【校内模拟】T3 图论题 (dfs序)(线段树)
【描述】 给你一个图,一共有 N 个点,2*N-2 条有向边。 边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点到达。 2. 接下来的 N-1 条边,一定是从 i 到 1(2&amp;amp;amp;lt;=i&amp;amp;amp;lt;=N)的有向边,保证每个点都能到1 有q 次询问: 1 x w :表示将第 x 条边的边权修改为w...原创 2018-08-30 14:52:12 · 207 阅读 · 0 评论