LCA
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
P3384 【模板】轻重链剖分(树剖)
P3384 【模板】轻重链剖分(树剖) 题意 给定树:树链修改,树链求和,子树修改,子树求和。 思路 树链剖分裸题。 树剖保证了重链编号连续,子树编号连续,然后可转化为区间问题,上个线段树即可。 code // Problem: P3384 【模板】轻重链剖分 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P3384 // Memory Limit: 125 MB // Time Limit: 1000 ms // Date: 2021原创 2021-03-23 19:32:50 · 305 阅读 · 1 评论 -
P1967 [NOIP2013 提高组] 货车运输(MST&树上倍增)
P1967 [NOIP2013 提高组] 货车运输(MST&树上倍增) 题意 给定nnn个点mmm条边的无向图,每条边有边权,给定qqq个询问,每个询问包括一个起点,终点,求该路径的最大承重(即所有路径的最小值中最大的一个) 思路 MSTMSTMST+树上倍增的好题。 贪心得考虑问题,显然是都用权值较大的边更优,所以构造一棵最大生成树,然后对于每个路径st→edst\rightarrow edst→ed,显然这条路径在树上就是st−→lac(st,ed)→edst-\rightarrow lac(s原创 2021-03-22 11:18:13 · 344 阅读 · 0 评论 -
MMSet2(LCA&树的直径)
MMSet2(LCA&树的直径) 思路:树的直径,结论:一棵树的任意点集SSS中距离最远的两个点(类似树的直径)必有一个点是深度最大的点,且树上所有点的到该节点距离最大值的最小值为:该点集的直径除以2向上取整。 因为:所有点的f(u)f(u)f(u)都是与该点集直径d(x,y)d(x,y)d(x,y)到这两个点的距离取mxmxmx,所以要找到最小的值,只需要mx+12\dfrac{mx+1}{2}2mx+1,这样肯定是最小的,其他的都会大于距离的一半。 ep:mx=d(x,y)=5,ep:mx=d原创 2020-08-18 13:12:41 · 391 阅读 · 0 评论 -
漂亮的公园(树剖LCA)
漂亮的公园(树剖LCA) 传送门 思路:树剖LCALCALCA。一个结论:距离某个点集SSS最大的点vvv,一定是距离点集SSS中相距最大的两个x,yx,yx,y的距离最大。即 maxdis(nodeS,v)=max(dis(x,v),dis(y,v))。[dis(x,y)≥dis(u,v),∀u,v∈S]max_{dis}(node_{S},v)=max(dis(x,v),dis(y,v))。 [dis(x,y)\geq dis(u,v),\forall u,v\in S]maxdis(nodeS,v原创 2020-06-03 12:30:45 · 408 阅读 · 0 评论 -
Borrow Classroom (LCA)
Borrow Classroom (LCA) 题目传送门 题意:给一棵树的三个结点A,B,C求dis(A,1)与dis(B,C)+dis(C,1)的关系。 思路:利用LCA求出dis(A,1)=dep[A],dis(C,1)=dep[C],dis(B,C)=dep[B]+dep[C]-dep[lca(B,C)]。然后还要特判一下当dis(A,1)=dis(B,C)+dis(C,1)时 lca(A...原创 2020-04-08 12:31:08 · 319 阅读 · 0 评论 -
P3379 【模板】最近公共祖先(LCA)
P3379 【模板】最近公共祖先(LCA) 思路:模板题思路不多说,唯一需要注意的一点是此题用vector会多耗费时间(因为内存不够会自动申请2倍内存,然后复制元素到新内存耗费时间),用链式快很多。具体见代码。 #include<bits/stdc++.h> using namespace std; const int N=1e6+5; const int M=log2(N); int...原创 2020-04-08 10:19:13 · 273 阅读 · 0 评论