DFS序
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
qko的爱情
题目链接:qko的爱情显然我们只需要没有人的点考虑。对于没有人的点,我们肯定是要使得整个子树向上移动,其实可以看出深度最大的点移动到这里。然后就可以用线段树维护区间最大的深度然后计算答案。我们要注意,计算的时候应该先递归子树,然后对当前没有人的点计算答案,因为对于两颗不同的子树,移动之后最大深度是会发生变化的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#de原创 2021-07-05 14:46:57 · 238 阅读 · 0 评论 -
Codeforces - Propagating tree
题目链接:Codeforces - Propagating tree一颗线段树 or fenwick是可以做的,不过各种打标记,很复杂。我们对奇数和偶数深度的分别开一颗线段树即可。然后同深度加,不同深度减。然后对于子树区间,dfs序搞搞就行了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace原创 2020-07-19 23:07:31 · 182 阅读 · 0 评论 -
No Link, Cut Tree!
题目链接:No Link, Cut Tree!因为是完全二叉树,所以我们可以发现只有logn层,所以我们可以对每一层暴力统计。怎么统计呢?我们可以利用dfs序,对每一层存下dfs序,然后对于不要的dfs序区间,二分即可找到对应位置。然后怎么快速求值呢?显然可以前缀和。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusi原创 2020-05-29 22:31:51 · 285 阅读 · 0 评论 -
[SDOI2015]寻宝游戏
题目链接:[SDOI2015]寻宝游戏从任意一个关键点出去,然后走回来路径长度都是一样的。因为是一个回路。答案其实跟dfs序有关。我们对关键点按照dfs序排序之后可以发现:就是两两之间的距离之和+首尾距离。然后我们就可以用set维护集合的dfs序点,然后树剖求距离即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")...原创 2020-04-13 11:22:55 · 188 阅读 · 0 评论 -
51NOD - 2553双重祖先
题目链接:51NOD - 2553双重祖先先对第一颗树处理,求出每个点的dfs序。然后对于第二课树,我们就只需要在子树中找当前点在第一颗树的dfs的区间中的点的个数。子树中直接线段树合并即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define ...原创 2020-04-02 13:30:27 · 328 阅读 · 0 评论 -
Codeforces - New Year Tree
题目链接:Codeforces - New Year Tree因为颜色只有60种,所以直接状压即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=4e5...原创 2020-03-10 16:59:40 · 127 阅读 · 0 评论 -
Codeforces - Tree Requests
题目链接:Codeforces - Tree Requests这是一个极其好写,但是跑得极慢的代码。看到子树问题我们可以想到dfs序。然后对于每一层我们把对应字母的dfs序放进去。然后对26个字母二分dfs序,就可以找到对应字母的个数了。复杂度为:m*log(n)*26,但其实复杂度是跑不满的,因为不可能每个字母都是在n个dfs序当中二分。所以复杂度为:O(能过)。AC代码:#pr...原创 2020-02-10 19:06:15 · 261 阅读 · 0 评论 -
Codeforces - On Changing Tree
题目链接:Codeforces - On Changing Tree子树操作,比较显然的dfs序。我们看一下子树根对其他点的影响或贡献:x-(dep[v]-dep[u])*k然后拆开:x-dep[v]*k+dep[u]*k当我们操作根的时候,只要根定了,那么dep[u]*k就是一个定值。看成x的一部分。所以我们用两个lazy维护x和k即可。AC代码:#pragma GCC op...原创 2020-02-08 11:58:29 · 175 阅读 · 0 评论 -
DFS序建树 hdu 3974 Assign the task
Assign the taskTime Limit: 15000/5000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Problem DescriptionThere is a company that has N employees(numbered from 1 to N),every employee in th...原创 2019-07-26 11:02:01 · 239 阅读 · 0 评论 -
DFS序 poj 3321
Apple TreeTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 39797 Accepted: 11814DescriptionThere is an apple tree outside of kaka’s house. Every autumn, a lot of apples will grow in the...原创 2019-07-26 11:07:40 · 172 阅读 · 0 评论 -
选点
题目链接:选点看似像树形dp,而且还很麻烦。但是我们可以注意一下,这是二叉树,大小关系为: 左儿子 > 右儿子 > 根所以如果我们先遍历根,然后往右儿子走,然后往左儿子走,的dfs序。然后就是求LIS就行了。比较思维。AC代码:#include<bits/stdc++.h>using namespace std;const int N=1e5+10;...原创 2019-12-23 16:16:24 · 258 阅读 · 0 评论