lca/dfs序/欧拉序/树链剖分
文章平均质量分 67
lca/dfs序/欧拉序
Code92007
No Saturday , no Sunday , no holiday .
展开
-
EPIC Institute of Technology Round August 2024 D2. DFS Checker (Hard Version)(dfs序性质 lca)
(2)搜完一棵子树,跳到另一棵子树的根上,满足a[i]的父亲是a[i-1]的祖先,且a[i-1]是叶子。t(t<=1e4)组样例,每次给n(n<=3e5)个点的树,和一个初始dfs序序列,考虑dfs序,每次要么是下钻一个点,要么是搜完一棵子树,跳到另一棵子树的根上。考虑dfs序,dfn[u]一定是最小的直连dfn[v]减1,做法2是赛中的想法,是一个乱搞,但是也卡不掉,感觉也挺对的。(1)下钻一个点的时候,满足a[i]是a[i-1]的儿子。所以,只需满足性质的点是n-1个点,就是合法的dfs序。原创 2024-08-12 03:03:38 · 939 阅读 · 1 评论 -
AtCoder Beginner Contest 351 G. Hash on Tree(树剖维护动态dp 口胡题解)
l为重链头的dfs序,r为叶子重链尾的dfs序时,这个区间节点对应的(a,b)中a的值。由于为0的值会对运算值有影响,并且儿子f值从一个0变成没有0的时候难以恢复之前的乘积,基本是对于有根树树形dp,想动态获取根节点的dp值,dp值和树上点权相关,点权带修,所以单独记录0的个数,所以变更的时候,动态记录链头点的f值为0的儿子的数量。其中,b是f值非零的轻儿子的f积,x是重儿子的f值(未知,待代入)递归到叶子的时候,由于叶子不存在重儿子,x值为0,所以链头的f值,就是当线段树区间[l,r],原创 2024-04-28 04:51:32 · 400 阅读 · 0 评论 -
AtCoder Beginner Contest 337 G. Tree Inversion(dfs序+树状数组+树上差分 补写法)
定义f(u)为满足v原创 2024-01-22 01:47:04 · 542 阅读 · 0 评论 -
Codeforces Round 914 (Div. 2) E. Tree Queries(dfs序/欧拉序性质+树的直径性质+线段树)
若in[a]<in[b]<out[a],说明b在a的子树里,一定有in[a]<in[b]<=out[b]<=out[a]a的dfs序对应[in[a],out[a]],b的区间对应[in[b],out[b]]2. x所在的连通块能到的最远点,一定是x这个连通块的直径的两个端点中的一个。新的树的直径的两个端点,一定是在原来两棵树直径的四个点里选两个点。利用上文提到的树的直径的性质,统一merge合法区间的直径,剩下的区间都是x的可达区间,每个区间对应一个连续的dfs序。原创 2023-12-11 05:25:05 · 675 阅读 · 0 评论 -
Codeforces Round 914 (Div. 2) F. Beautiful Tree(树链剖分/倍增+线段树优化区间建图+拓扑排序)
2^i步的点连着2^(i-1)步的两个点,也是一棵入树、一棵出树,每棵树的点的总数是nlogn。1 a b c,要求点a到点b的简单路径上,最小值位于点c处,保证c在a到b的简单路径上。2 a b c,要求点a到点b的简单路径上,最大值位于点c处,保证c在a到b的简单路径上。n(n原创 2023-12-11 04:00:08 · 566 阅读 · 0 评论 -
Codeforces Round 892 (Div. 2) F. Teleportation in Byteland(多源dijkstra+lca&树倍增+分类讨论)
此外,u到lca前半段,lca到v后半段,两段的式子会有不同,所以需要分别维护mn和mn2数组。在加油站,每加一次油的时间是T(1<=T<=1e6),每个点可以无数次加油。可能会考虑说,第二步中,如果x对应的y在x和v之间,是不需要从y回到x的,初始速度v是1,每加一次油,当前速度v就会乘2,而通过一条边的时间是。不过,此时链上x处的答案,会不如y处的答案,所以还是不影响最优解的。q(q<=1e5)次询问,每次给出u、v,询问从u到v的最短时间。对于每组询问,先算一个不加油的时间,然后考虑加油的情况,原创 2023-08-21 01:26:23 · 274 阅读 · 0 评论 -
Codeforces Round #721 (Div. 2) D. MEX Tree(思维题-树、mex性质)
题目t(t<=1e4)组样例,每次给出n(n<=2e5)个点,点号[0,n-1]的一棵树,对于每一个k从[0,n+1],求树上路径满足路径点集合的mex恰为k的无序点对数保证sumn<=2e5思路来源乱搞AC题解如果mex>=1,则这条路径一定要包含0如果mex>=2,则这条路径一定要包含0、1如果mex>=3,则这条路径一定要包含0、1、2则注意到mex=i能成立,必须[0,i-1]在一条链上,所以对0号点dfs,时刻维护以0原创 2021-07-04 14:23:59 · 348 阅读 · 0 评论 -
Codechef June Challenge 2021 Division 3 (Rated) G.Dual Distance(思维题-树/lca)
题目t(t<=8)组样例,每次给出一棵n(n<=1e5)个点的树,q(q<=1e5)组询问,每次给出一对(a,b),询问即对于n个点来说,每个点到点a和点b中两个点距离的较小值为该点的贡献,求贡献和sumn<=5e5,sumq<=5e5思路来源乱搞AC题解考虑a和b之间的所有点d,记c是ab路径上的中点,如果知道这些点d到a的距离和,如图,蓝色之和,如果知道这些点d到b的距离和,如图,粉色之和,如果知道这些点d到c的距离和,如图,原创 2021-07-04 13:49:27 · 454 阅读 · 1 评论 -
Codeforces Round #199 (Div. 2) E - Xenia and Tree(lca+分块(定期重构))
题目n(n<=1e5)个点的树,树上的点有颜色初始情况,除了根节点1是红色以外,其他点都是蓝色m(m<=1e5)次操作,操作分两种1 u 把u染成红色2 u 询问离u最近的红色点的距离 若u为红色输出0思路来源https://blog.csdn.net/u013451221/article/details/47132707?utm_source=blogxg...原创 2019-09-07 10:35:44 · 242 阅读 · 0 评论 -
UVa 10410 - Tree Reconstruction(树/dfs+bfs)
题目树的节点数为n(n<=1e3),给定树的bfs序列和dfs序列,bfs/dfs有多个节点选择时,是按点号增序进行bfs/dfs的要求输出树的每个节点,都有哪几个儿子,多种方案时输出一种即可思路来源https://blog.csdn.net/keshuai19940722/article/details/38778243题解pos[x],指x在bfs序列中的位置...原创 2019-09-05 18:59:08 · 189 阅读 · 0 评论 -
AtCoder Beginner Contest 133 F.Colorful Tree(欧拉序+线段树)
题目n(n<=1e5)个点的树,第i条边有u,v,c,d,u和v为边的两端,c为色号,d为边长q(q<=1e5)个询问,第j次询问x,y,u,v,即把色号为x的所有边权都改成y之后,询问u到v的距离思路来源https://atcoder.jp/contests/abc133/submissions/6298312题解离线,把所有颜色为i的树边加到col[i]里,...原创 2019-07-08 15:09:51 · 476 阅读 · 0 评论 -
The 2019 ACM-ICPC China Shannxi Provincial Programming Contest E.Tree(树链剖分+线段树区间or/and/xor)
题目n(n<=1e5)个数,第i个数为ai(0<=ai<=1e9),代表树的点权以下n-1行读入树的双向边u和v以下m(m<=1e5)个操作,每次操作读入op,s,t,操作分三种类型1 s t 将树上1到s的路径的点权v都作v|t操作2 s t将树上1到s的路径的点权v都作v&t操作3 s t将树上1到s的路径的点权都取出来,每一个值当一...原创 2019-05-27 16:44:28 · 441 阅读 · 0 评论 -
poj1330 Nearest Common Ancestors(lca模板题)
题目T组样例,N(2<=N<=1e4)个节点,给出N-1条有向边u->v后,询问一组u和v的lca思路来源《挑战程序竞赛》P330-331题解lca裸题,用RMQ+ST就好了,其实倍增也是应该掌握的由于只有一组询问,所以预处理欧拉序dfnid用来记录dfs序中第一次访问的时间戳不妨id[u]<id[v],那么lca(u,v)=dfn[[i...原创 2019-05-02 19:53:53 · 208 阅读 · 0 评论 -
天梯赛 L2-011 玩转二叉树(前中序确定唯一序列)
题目给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入N(<=30),代表N个节点,依次输入中序遍历序列和前序遍历序列,输出镜像bfs序列思路来源https://blog.csdn.net/qq_28300479/article/de...原创 2019-03-25 16:03:21 · 213 阅读 · 0 评论 -
牛客小白月赛12 H-华华和月月种树(dfs序+差分树状数组)
题目思路来源官方题解https://ac.nowcoder.com/discuss/160376?type=101&order=0&pos=5&page=1思路来源https://ac.nowcoder.com/acm/contest/view-submission?submissionId=40398427题解官方题解先离线...原创 2019-03-12 00:06:38 · 351 阅读 · 2 评论 -
The North American Invitational Programming Contest 2016 I.Tourists(LCA求树上任意两点距离+埃式筛法)
思路来源https://www.cnblogs.com/acjiumeng/p/7249890.html题意给定一棵树,求dis(i,j)定义为树上两点距离+1,n≤2e5题解dfs预处理,求根节点到每一点的距离,即点i的深度depth[i]。这里默认1号点是根节点。然后在线二分搜索+倍增求LCA,求i和j的最近公共祖先z。即使树退化成链表,...原创 2018-10-02 17:21:00 · 301 阅读 · 0 评论 -
poj2631 Roads in the North(树的直径/两次bfs/树形dp)
题意求树的直径,即树上最长的一条路题解①两次bfs②两次dfs,期间更新最大值③树形dp,因为一个分支节点只能从三个方向更新,最大的那两个方向之和就是该点的最长距离思路来源及证明部分http://hzwer.com/2996.htmlhttps://www.cnblogs.com/a-clown/p/6131346.html代码①树形dp#incl...原创 2019-01-12 20:55:13 · 489 阅读 · 0 评论 -
Educational Codeforces Round 58 (Rated for Div. 2) D.GCD Counting(树的直径+gcd)
题意思路来源Codeforce__JuRuo题解将每个gcd分解素因子放入对应vector相当于对每个素因子建了一棵树遍历每个素因子的树,寻找直径,更新答案注意C++11的写法 好好学学 会省不少功夫还有一些技巧性写法 加油!代码#include<bits/stdc++.h>using namespace std;#define l...原创 2019-01-12 11:52:56 · 410 阅读 · 0 评论