![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
公共祖先
~无相~
这个作者很懒,什么都没留下…
展开
-
AcWing 352. 闇の連鎖(公共祖先+树上差分)
题目 传说中的暗之连锁被人们称为 Dark。 Dark 是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它。 经过研究,你发现 Dark 呈现无向图的结构,图中有 N 个节点和两类边,一类边被称为主要边,而另一类被称为附加边。 Dark 有 N – 1 条主要边,并且 Dark 的任意两个节点之间都存在一条只由主要边构成的路径。 另外,Dark 还有 M 条附加边。 你的任务是把 Dark 斩为不连通的两部分。 一开始 Dark 的附加边都处于无敌状态,你只能选择一条主要边切断。 一旦你切断了一条主要边,原创 2020-09-23 14:22:07 · 72 阅读 · 0 评论 -
次小生成树模板(DFS/LCA)
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long LL; const int N = 510, M = 10010; int n, m; struct Edge { int a, b, w; bool f; bool operator< (c原创 2020-09-22 17:23:59 · 126 阅读 · 0 评论 -
AcWing 1171. 距离(tarjan算法求公共祖先/求任意两点之间的距离)
题目 给出 n 个点的一棵树,多次询问两点之间的最短距离。 注意: 边是无向的。 所有节点的编号是 1,2,…,n。 输入格式 第一行为两个整数 n 和 m。n 表示点数,m 表示询问次数; 下来 n−1 行,每行三个整数 x,y,k,表示点 x 和点 y 之间存在一条边长度为 k; 再接下来 m 行,每行两个整数 x,y,表示询问点 x 到点 y 的最短距离。 树中结点编号从 1 到 n。 输出格式 共 m 行,对于每次询问,输出一行询问结果。 数据范围 2≤n≤104, 1≤m≤2×104, 0<原创 2020-09-23 12:53:59 · 202 阅读 · 0 评论 -
AcWing 1172. 祖孙询问
题目 给定一棵包含 n 个节点的有根无向树,节点编号互不相同,但不一定是 1∼n。 有 m 个询问,每个询问给出了一对节点的编号 x 和 y,询问 x 与 y 的祖孙关系。 输入格式 输入第一行包括一个整数 表示节点个数; 接下来 n 行每行一对整数 a 和 b,表示 a 和 b 之间有一条无向边。如果 b 是 −1,那么 a 就是树的根; 第 n+2 行是一个整数 m 表示询问个数; 接下来 m 行,每行两个不同的正整数 x 和 y,表示一个询问。 输出格式 对于每一个询问,若 x 是 y 的祖先则输出原创 2020-09-23 10:30:47 · 139 阅读 · 0 评论