LCA问题(/tarjan)
Nowed
把泪水种在心上,一定会开出勇敢的花。
展开
-
#树上差分+lca# [校测 小王子]
Title Solution 考虑统计所有的树边被新边覆盖了几次。 1.覆盖0次,则毁掉它就已经可以使树断裂了。这时任意选一条新边去毁,产生M种方案。 2.覆盖1次,则毁掉它和覆盖它那条新边就一定能使树断裂,产生的方案数为1,是唯一解。 3.覆盖2次或以上,无论怎么样都不能使树断裂,产生的方案数为0 定义g[u]的意义为,u和它父亲连接的那条边被覆盖的次数。 对于每一条新边〈u,v〉,令g[u]++;g[v]++;g[lca(u,v)]-=2。 然后dfs一遍,对于每条树边〈u,v〉(u是v父亲),原创 2020-11-04 20:01:33 · 200 阅读 · 0 评论 -
#离散化+欧拉序+lca+树上莫队# [luoguSP10707] COT2 - Count on a tree II
Title SP10707 COT2 - Count on a tree II Solution 注意lca别打错了 注意欧拉序的区间别错了 注意不带修的莫队块的大小设置为sqrt(n),否则为pow(n,2.0/3.0) 先把节点离散化一下。 我们可以求树上的欧拉序,对于任意两个点上的路径,就是从iii到jjj的只出现了一个数的节点。假如是它们的lcalcalca的话,就不会出现在序列中,所以要特殊处理。 用firstfirstfirst标记第一次出现的位置, 用lastlastlast标记第二次出现的原创 2020-10-21 12:01:41 · 158 阅读 · 1 评论 -
#Tarjan+lca# [poj 3694] Network
Title poj 3694 Network Solution 可以用TarjanTarjanTarjan求出图中的桥 注意有重边, 这里用的是朴素的方法。 对于x,yx,yx,y,假如他们同在一个点里,对桥无减少的贡献,否则同时枚举到lcalcalca的路径,将桥标志为falsefalsefalse,并减少桥的数量 Code #include<cstdio> #include<cstring> #include<algorithm> #define rep(i,原创 2020-08-19 21:28:53 · 162 阅读 · 0 评论 -
#数学期望+lca#[ssloj 1457] 树(tree)
Title 题目描述 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择一条走过去, 为了确保第二天能够准时到校, 你要求出每个梦期望经过多少条边才能苏 醒. 为了避免精度误差, 你要输出答案模10^9 + 7的结果. 输入 第一行两个整数分别代表 N 和 Q. 接下来 N-1 行, 每行两个整数 u, v 代表树中的一条边. 接下来 Q 行, 每行两个整数代表询问的原创 2020-08-10 22:24:55 · 180 阅读 · 0 评论 -
#树上差分#[luogu 3128] [USACO15DEC]最大流Max Flow
题目 https://www.luogu.com.cn/problem/P3128 解题思路 树上差分。 代码 #pragma GCC optimize("O2") #pragma GCC optimize("O3") #pragma GCC optimize("Ofast") #include<cstdio> #include<algorithm> #include&...原创 2019-11-30 18:56:06 · 202 阅读 · 0 评论 -
[luogu p3379]【模板】最近公共祖先(LCA){树上倍增法}
题目 https://www.luogu.org/problemnew/show/P3379 解题思路(树上倍增) f[x][kf[x][kf[x][k表示xxx的2k2k2^{k}辈祖先,即从xxx向根节点走2k2k2^{k}步到达的结点。特别的,若该结点不存在,则令f[x][k]=0f[x][k]=0f[x][k]=0。f[x][0]f[x][0]f[x][0]就是xxx的父结点。 ...原创 2018-08-14 08:40:26 · 214 阅读 · 0 评论 -
[HDU2586] How far away ?{LCA.tarjan算法/倍增算法}
文章目录题目解题思路代码`倍增(TLE)`代码`tarjan算法(AC)`$tanjan$算法本质上是使用并查集对“向上标记法”的优化 题目 http://acm.hdu.edu.cn/showproblem.php?pid=2586 解题思路 倍增算法O((n+m)log&nbsp;n)O((n+m)log\ n)O((n+m)log&nbsp;n) LCA.tarjan算法O(n+m)O(n...原创 2018-12-01 16:57:15 · 420 阅读 · 3 评论 -
[jzoj 3054] 祖孙询问 {lca}
题目 Description 已知一棵n个节点的有根树。有m个询问。每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系。 Input 输入第一行包括一个整数n表示节点个数。 接下来n行每行一对整数对a和b表示a和b之间有连边。如果b是-1,那么a就是树的根。 第n+2行是一个整数m表示询问个数。 接下来m行,每行两个正整数x和y。 Output 对于每一个询问,输出1:如果x是y的祖先,输出...原创 2019-03-09 10:56:06 · 203 阅读 · 0 评论