树上dfs
小菜鸡加油
菜鸡
什么都能折磨
展开
-
D. MEX Tree(思维+dfs序+讨论)
#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio>#include<algorithm>#define debug(a) cout<<#a<<"="<<.原创 2021-05-23 14:12:59 · 370 阅读 · 1 评论 -
E - Count Descendants(dfs序)
https://atcoder.jp/contests/abc202/tasks/abc202_e思路:看到的时候在线没啥想法,打算冲一手dsu。但是应该不至于要用到吧最后确实找别人代码看到了dsu的写法。考虑离线。我们只要把这个点之内和这个点之外的到根距离x的减去这个点之外到根距离x的就是这个点之内到根距离x的。#include<iostream>#include<vector>#include<queue>#include<c原创 2021-05-23 01:04:24 · 251 阅读 · 2 评论 -
C. Garland(思维)
https://codeforces.com/problemset/problem/767/C思路:答案必定%3==0然后跑子树的和一旦出现了sum/3就可以砍一段,然后记为0接着跑#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>原创 2021-05-02 18:11:26 · 155 阅读 · 0 评论 -
F. Three Paths on a Tree(树的直径)
https://codeforces.com/contest/1294/problem/F思路:思路还是比较好想的。取两个点放到直径,必然是最优的。剩下一个算距离最大的就好。所以开始我是把直径的点标记了。然后最后扫的时候再算一下到lca(i,A),lca(i,B)去更新最值。但是一直wa。最后索性改成三个点的Σdis/2,啥也不判了。还没找到原来的问题。感觉是getdis写错了...#include<iostream>#include<vector>原创 2021-05-01 14:34:44 · 237 阅读 · 1 评论 -
D. Book of Evil(树的直径性质/树形dp树最长链)
https://codeforces.com/problemset/problem/337/D思路:找出在这颗树上距离最远的两只鬼,将它们的位置设为A,B。类似于树的直径,这颗树上的其余点具有这样的性质:如果某一个点到A和B的距离都不超过d,那么该点到其余鬼所在点的距离也不会超过d。否则,如果存在某一个鬼和该点的距离超过d,那么这个鬼所在的位置离A,B两点中某一点的距离大于A,B两点间的距离。证明就类似树的直径所以求包含所有被标记的点的最小子树的直径,然后比较其...原创 2021-04-30 15:10:02 · 174 阅读 · 1 评论 -
Add on a Tree: Revolution(思维+构造)
https://codeforces.com/contest/1188/problem/A2思路:注意找的是当前节点的两个儿子的叶子,不全是一个儿子下的叶子参考:https://blog.csdn.net/yopilipala/article/details/95652210?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-3.control&dist_原创 2021-04-26 21:10:10 · 107 阅读 · 0 评论 -
B. Kamil and Making a Stream(暴力+前缀gcd)
https://codeforces.com/contest/1229/problem/B思路:开始直接儿子logn跳,cf这么强的数据肯定有链子的数据,直接tle9.考虑到gcd的单调性,一条链子上最多只有logn个。两个角度理解:1.gcd每次减小要减少的话至少会少一个次幂的一次。假设是2的1次,那么就是logn的递减速度2.gcd(a,b)=gcd(b,amodb) mod运算每次至少会少一半。(两个不等式合并)因此我们从根节点跑一个前缀,map记录每个节点的前缀的gcd的距离原创 2021-04-23 22:06:49 · 312 阅读 · 0 评论 -
C.Jeremy Bearimy(树上点对最大值/最小值边权总和)
https://codeforces.com/contest/1280/problem/C思路:参考:https://blog.csdn.net/qq_43682148/article/details/105297317?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242将具体的构造转化成算边的贡献进行思考。再分别贪心考虑最大值,最小值的情况下节点和父亲的边分原创 2021-04-22 18:41:41 · 202 阅读 · 0 评论 -
D - Miracle Tree(思维+构造+树的直径)
https://atcoder.jp/contests/arc117/tasks/arc117_d思路:比较明显的是树的直径把。然后构造:先从树的直径开始1,2,3...如果有分枝,先跑完分枝,然后到叶子了+1#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#i原创 2021-04-20 23:39:01 · 176 阅读 · 0 评论 -
D. Directed Roads(思维+组合数学+找基环)
https://codeforces.com/problemset/problem/711/D思路:组合部分好想。然而我找环的时候,开始是用tarjan,然而死活不对,我去看了眼tarjan无向图找环的板子,发现没啥毛病。然后改成建有向图,用有向图强连通分量就好了。因为像2 1这样的数据会反复跳导致进入dfs回溯的else if里面多次判断。所以用dfs直接深度找一个环或者tarjan都是可以的。#include<iostream>#include<vector>#原创 2021-04-11 20:25:54 · 157 阅读 · 2 评论 -
B. Alyona and a tree(思维+倍增/二分+树上差分)
https://codeforces.com/problemset/problem/739/B思路:对于题目的条件,转化成对于某个点,其有多少点能控制它。朴素就是每个点网上跳对于每个点能更新的更新,不能更新意味着break。O(n^2)break意味着其条件满足单调性,于是可以树上二分能到的最远的祖先,当然了,倍增也是同样的道理,其二进制能表示出最远的祖先。然后对于起点到祖先的一段区间,我们可以直接+1,树上差分比较方便(当然你硬要写个树剖再多个log.....也无话说对于求带边权的两点原创 2021-04-11 14:57:43 · 164 阅读 · 0 评论 -
455B - A Lot of Games(思维+tire上博弈)
https://codeforces.com/problemset/problem/455/B思路:开始看这个题,以为k次单纯看奇偶就好。想了一会发现不是,先手如果能输也能赢可以一直演戏到最后一盘然后获胜。网上大部分题解没怎么看懂。最后结合几篇还可以的看懂了。我用的分开dfs两遍的方法。dfs1判一个先手是否可以赢。 其条件是该节点的所有儿子都是必败态。dfs2判一个先手是否可以输。其条件是该节点的一个儿子是必胜态。设a=dfs1,b=dfs2.那么结果的讨论为如果a==原创 2021-04-07 12:04:31 · 152 阅读 · 0 评论 -
1436D - Bandit in a City(思维+二分+细节)
https://codeforces.com/problemset/problem/1436/D思路:直接二分最后答案。check:后序遍历从底下网上return。return 到该点是该点做多还能有的数量。累加好之后判是否超了。注意sum的累加会炸longlong,同时128超时。#include<iostream>#include<vector>#include<queue>#include<cstring>#include&原创 2021-04-06 12:18:30 · 136 阅读 · 2 评论 -
191C - Fools and Roads(树上边差分/树链剖分)
https://codeforces.com/problemset/problem/191/C思路:模板没必要C题上树剖吧..还要再来个线段树。简单的区间维护差分就好,用树上差分。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#in原创 2021-04-05 14:51:09 · 324 阅读 · 0 评论 -
吴楚月的表达式(dfs+维护运算同优先级块)
https://ac.nowcoder.com/acm/contest/9984/H思路:虽然上了数据结构课的第一眼可能是要用个栈...(栈也确实能做刚开始想的时候就dp[i]维护到i这个节点的答案,然后dfs跑一遍,发现有前一个符号的加减关系,于是开一个lastop,dfs传一个父亲的字符。但是还不行。因为比如1+2*3/4*5。dp[4]这个答案是不能用于转移的,答案要分割成+号前面的一个块和5前面的联通块。比赛的时候想错了,以为暴力往上跳是O(n)级别的。但是实际上是在一根树链原创 2021-02-19 21:49:14 · 247 阅读 · 0 评论 -
A. 小天狼星的访问(A*思想)
Description经过数月的准备,小天狼星,一个被诬陷的杀人犯,准备闯入霍格沃茨见见他的侄子。霍格沃茨的地图呈一颗树状分布。每个房间由若干跳过道通向其他房间。由于小天狼星想尽快找到哈利:0.他会从房间0开始找1.他总是会选择离自己最近的房间找2.如果没找到,则继续选最近的房间深入3.如果已没有房间可走,则返回到上一个房间,继续选择(往回走也算时间哦)。4.当然,除了往回走,小天狼星是不会去一个房间两次的。Input第1行,nn房间个数,pp哈利所在的房间。(p≤n<100)原创 2021-02-03 00:40:20 · 270 阅读 · 0 评论 -
E.Number of Simple Paths(逆向思维+基环树)
https://codeforces.com/contest/1454/problem/E参考:https://frozenguardian.blog.csdn.net/article/details/110137634?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-t原创 2021-01-24 16:02:47 · 138 阅读 · 0 评论 -
CodeForces 741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(思维+dsu on tree+前缀异或)
CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths大概是dsu on tree的最难题了吧...还是存在有些地方没有想通。暂时先存下来。讲的比较详细的思路:这里Soution: 注意到字母最大是v,即最多有22种字符,看到这个数据范围就想到利用状压。那么在这题怎么用上状压呢?想到一个性质:一个简单路径可以通过打乱变成回文串,当且仅当在这个路径上出现的次数为奇数的字符个数不超过一个。 我们状压记录每个字符出现的奇偶原创 2020-12-03 22:13:16 · 432 阅读 · 0 评论 -
Tree(思维+动态开点+dsu on tree)
本来做的是农林的题,那题直接dsu就过了。https://ac.nowcoder.com/acm/contest/7872/J原意就是用来练dsu on tree的,牛客数据水不会有mle的问题。思路:结合前面来说,我们来具体考虑暴力怎么做。由于题目给出x,y不能互相为lca,这个条件如果直接去实现会比较困难。转化一下,也就是说考虑每个点作为lca的贡献。还是这张图,考虑如何暴力统计以1作为lca贡献,也就是跑一遍1的每个子树2,5,8。在跑的过程中更新map里面(map存.原创 2020-11-13 16:50:51 · 1604 阅读 · 0 评论 -
Lomsat gelral(dsu on tree模板理解)
https://www.luogu.com.cn/problem/CF600E题意翻译有一棵nn个结点的以11号结点为根的有根树。 每个结点都有一个颜色,颜色是以编号表示的,ii号结点的颜色编号为c_ici。 如果一种颜色在以xx为根的子树内出现次数最多,称其在以xx为根的子树中占主导地位。显然,同一子树中可能有多种颜色占主导地位。 你的任务是对于每一个i\in[1,n]i∈[1,n],求出以ii为根的子树中,占主导地位的颜色的编号和。 n\le 10^5,c_...原创 2020-11-13 00:20:12 · 305 阅读 · 0 评论 -
P2986 [USACO10MAR]Great Cow Gathering G(带点权树重心/树形dp+换根dp)详解
https://www.luogu.com.cn/problem/P2986先说带点权的树重心做法:https://blog.csdn.net/zstuyyyyccccbbbb/article/details/108558682树的重心的定义以及一些性质。如果这个树有点权和边权怎么办?关于边权:其实和所有边为单位1的重心一模一样。(网上搜了搜没怎么有比较详细的说明的,姑且当性质结论1)关于点权:把”最大的子树节点数最少“改成“最大点权块最小”。感性证明:把这个问题转化成刚在.原创 2020-10-07 17:38:21 · 418 阅读 · 0 评论 -
E. Construct the Binary Tree(满二叉树-长链构造)
https://codeforces.com/problemset/problem/1311/E题意翻译要求构造一个n个节点的二叉树(每个节点拥有不超过2个孩子),节点1为根,要使所有节点到根的距离之和为d。要求先判断可不可以构造,如果可以输出“YES”,下一行输出2到n号节点的父亲节点,否则输出“NO”。有多组询问。输入输出样例输入 #1复制35 710 1910 18输出 #1复制YES1 2 1 3 YES1 2 3 3 9 9 2 1 6 NO.原创 2020-09-20 10:39:56 · 184 阅读 · 0 评论 -
D. Eternal Victory(思维+树dfs)
https://codeforces.com/contest/1084/problem/D题意:树上有边权,要求经过所有点,使得总边权最小。思路:通过模拟可以发现,不管怎么走,有很多的路是要走两遍的,而且可以发现不管怎么走总会有一条从根节点出发到某个叶子节点结束的只经过一次边的路径。那dfs找出这个最长的走一次的路径,答案就是全部边权总和*2-这个最长。#include<iostream>#include<vector>#include<queue>原创 2020-09-16 16:35:56 · 229 阅读 · 0 评论 -
F1. Tree Cutting (Easy Version)(思维+树dfs)
https://codeforces.com/problemset/problem/1118/F1题意翻译给一棵树,每一个节点都是红色,蓝色或者无色。一条边是合法的当且仅当删除这一条边之后,树被分成两部分,这两部分不同时含有红色和蓝色问有多少条合法的边。数据范围:1 <= n <= 3e5,a_iai= 1表示是红色,a_iai= 2 表示蓝色输入输出样例输入 #1复制52 0 0 1 21 22 32 42 5输出 #1复制1..原创 2020-09-13 20:52:09 · 501 阅读 · 0 评论 -
C. Link Cut Centroids(求树的重心)
https://codeforces.com/contest/1406/problem/C做这个题前提是要知道树的重心。百度拉了一下。引用一下:https://blog.csdn.net/weixin_43810158/article/details/88391828树的重心定义为树的某个节点,当去掉该节点后,树的各个连通分量中,节点数最多的连通分量其节点数达到最小值。树可能存在多个重心。如下图,当去掉点1后,树将分成两个连通块:(2,4,5),(3,6,7),则最大的连通块包含节点个数为3。若原创 2020-09-13 09:24:21 · 2886 阅读 · 2 评论 -
Tree Tag(博弈,贪心,树的直径)
https://codeforces.com/contest/1405/problem/D题意:在一棵顶点为n的树上,Alice和Bob开始位于两个不同的顶点,轮流移动,Alice先手。移动时允许停留在同一个顶点上,如果无限步内Alice和Bob占据了同一个顶点,Alice胜,否则Bob胜,求胜者。思路:考虑YES/NO的单方面。考虑YES。根据样例,如果Alice能第一步抓到Bob,直接win。所以判Alice和Bob的dis是否<=da。直接用向上标记法求也可以,不必lca。然后看原创 2020-09-07 13:56:47 · 1602 阅读 · 0 评论 -
Paint the Tree(链dfs)
题目描述You are given a tree consisting ofnnvertices. A tree is an undirected connected acyclic graph.Example of a tree.You have to paint each vertex into one of three colors. For each vertex, you know the cost of painting it in every color.You have to..原创 2020-08-30 20:35:16 · 260 阅读 · 0 评论 -
D. Maximum Distributed Tree(贪心+树dfs)
https://codeforces.com/problemset/problem/1401/D题目描述You are given a tree that consists ofnnnodes. You should label each of itsn-1n−1edges with an integer in such way that satisfies the following conditions:each integer must be greater than00; ...原创 2020-08-29 16:32:10 · 412 阅读 · 0 评论 -
Anniversary party
http://acm.hdu.edu.cn/showproblem.php?pid=1520Problem DescriptionThere is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure of employees. It means that the supervisor relation原创 2020-08-06 20:47:39 · 117 阅读 · 0 评论 -
C. Journey
CodeForces – 839CThere arencities andn - 1roads in the Seven Kingdoms, each road connects two cities and we can reach any city from any other by the roads.Theon and Yara Greyjoy are on a horse in the first city, they are starting traveling through...原创 2020-08-08 23:36:06 · 280 阅读 · 0 评论