随笔分类 - 树 处理/直径/重心
摘要:【题目】 "51Nod 1273 旅行计划" 【题意】给定n个点的树和出发点k,要求每次选择一个目的地旅行后返回,使得路径上未访问过的点最多(相同取编号最小),旅行后路径上所有点视为访问过,求旅行方案。$n,k \leq 5 10^4$。 【算法】贪心 首先显然是访问所有叶子节点,先按叶子节点深度从
阅读全文
摘要:【题目】C. Centroids 【题意】给定一棵树,求每个点能否通过 [ 移动一条边使之仍为树 ] 这一操作成为树的重心。n<=4*10^5。 【算法】树的重心 【题解】若树存在双重心,则对于任何一个点将另一边的n/2个点取下来接上去即可,均成立。 若树为单重心,假设w为树的重心及根,x为当前考虑
阅读全文
摘要:【题意】n个点的树,有m个人同时开始走链,每一步花一秒,n个点都有观察员在ai秒观察,求每个观察员观察到的人数。 【算法】树上差分(主席树||线段树合并) 【题解】一个人的走链可以拆成u-lca和lca-v两部分,可以发现在u-lca链上的点能观察到这个人的w[x],满足所有deep[x]+w[x]
阅读全文
摘要:【题意】n个点的树,m条链,求将一条边的权值置为0使得最大链长最小。 【算法】二分+树上差分 【题解】 最大值最小化问题,先考虑二分最大链长。 对所有链长>mid的链整体+1(树上差分)。 然后扫一遍,对[在所有不满足链上]的边取最大值并check。 具体做法:对于二分的最大链长,将所有链长>mid
阅读全文
摘要:【题意】给定n个点的树,m次求[a,b]和[c,d]中各选出一个点的最大距离。abcd是标号区间,n,m<=10^5 【算法】LCA+树的直径理论+线段树 【题解】 树的直径性质:距离树上任意点最远的点一定是直径的一端。此结论在点集中依然试用。 那么根据性质,容易得到答案路径的两端一定是[a,b]直
阅读全文
摘要:【题意】给定带点权树,要求选择两个点x,y,满足所有点到这两个点中较近者的距离*点权的和最小。n<=50000,h<=100。 【算法】树的重心 【题解】代码参考自:cgh_Andy 观察要求容易发现和重心的定义【所有点距离和最小】十分相似。 要把树分成两部分,于是考虑枚举割掉一条边后,在两棵树中各
阅读全文
摘要:【算法】树上贪心 【题解】 因为一个点必须被覆盖,那么它如果没有被子树节点覆盖的话,就覆盖它的父节点。 从叶子开始贪心。 注意,如果它自己已经被选了就不需要选父节点了。 #include<cstdio> #include<algorithm> #include<cstring> #include<c
阅读全文
摘要:【算法】树型DP||树的重心(贪心) 【题解】 两遍DFS,第一次得到所有节点子树的路径和,第二次给出除了该子树外其它部分的路径和,时时计算答案。 long long!!! #include<cstdio> #include<cstring> #include<algorithm> #include
阅读全文
摘要:【算法】树的直径 memset(a,0,sizeof(a)) #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=10010; struct edge{int from,
阅读全文
摘要:★ 无向无环连通图=树 树上路径问题除了考虑树链剖分,还可以考虑离线树上差分。 树上路径差分:x到根+y到根-lca(x,y)到根+fa[lca(x,y)]到根 【最近公共祖先(LCA)】 http://blog.csdn.net/wendavidoi/article/details/5067005
阅读全文
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡
阅读全文