随笔分类 -  LCA(最近公共祖先)

摘要:题目链接 对树的路径进行操作,不难想到树的路径是唯一的,离不开LCA 添加一条新边后,答案有两种可能,一是走原树上路径,二是通过这条边走到 对于后者,其实答案就是dis(a,x)+1+dis(y,b)或者dis(a,y)+1+dis(x,b) 均是树上原有的,LCA可求 但是有个特殊情况,可以反复横 阅读全文
posted @ 2021-11-02 21:59 Neworld1111 阅读(76) 评论(0) 推荐(0)
摘要:"传送门" 这道题可以用树剖或树上差分+LCA做,思路一致。每次把两个点之间的路径+1即可,但是这里是经过一次+1次,终点除外。 这里采用树上差分+LCA,LCA使用树剖维护 树上差分的思路是:每个点的权值为其子树的权值和。 修改u到v的路径,那么$val[u]+1,val[v]+1,val[lca 阅读全文
posted @ 2018-11-23 21:45 Neworld1111 阅读(145) 评论(0) 推荐(0)
摘要:```cpp include include define MAX 500005 int d[MAX],fa[MAX],size[MAX],top[MAX],son[MAX]; int N,M,S,tot=0; int head[MAX]; struct edge{ int v,next; }G[M 阅读全文
posted @ 2018-03-24 19:22 Neworld1111 阅读(165) 评论(0) 推荐(0)
摘要:"友链" Description Examples input output Solution 两两算出LCA,有两个LCA是相同的,选择另一个作为答案 这道题似乎卡常数 cpp include include include define MAXN 500005 int head[MAXN]; i 阅读全文
posted @ 2018-03-11 13:44 Neworld1111 阅读(101) 评论(0) 推荐(0)
摘要:"题目链接" LCA裸题 cpp include define MAXN 1005 using namespace std; int N,Q,tot=0; struct size{ int v,w,next; }G[MAXN=0; i) if(d[anc[i][u]] =d[v])u=anc[i][ 阅读全文
posted @ 2018-03-08 23:12 Neworld1111 阅读(146) 评论(0) 推荐(0)
摘要:```cpp include include include include using namespace std; int n,m,Q; int head[100005],p; struct edge{int to,next,w;}e[200005]; void addedge(int u,in 阅读全文
posted @ 2018-02-23 13:20 Neworld1111 阅读(171) 评论(0) 推荐(0)
摘要:题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见。比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能够成为情侣 好了,现在我们来制造和处理一些复杂的情况。比如我们将给出一颗树,它很高兴自己有N个结点。 阅读全文
posted @ 2018-02-22 14:18 Neworld1111 阅读(134) 评论(0) 推荐(1)