LCA 最近公共祖先 (模板)
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <vector>
#define N 100005
using namespace std;
vector <int> vec[N] ;
vector <pair<int,int> > query[N];
struct node{
int first , second;
}e; vector <node> query[N]; int vis[N] , pre[N] , ans[N];
int Find(int x){
if(pre[x] == x){
return x;
}else{
pre[x] = Find(pre[x]);
return pre[x];
}
}
void dfs(int u , int fa){ pre[u] = u;
vis[u] = ;
for(int i = ; i < vec[u].size() ; i ++){
int v = vec[u][i];
if(v == fa) continue;
dfs(v , u);
} for(int i = ; i < query[u].size() ; i++){
int v = query[u][i].first;
int id = query[u][i].second;
if(vis[v] == ){
ans[id] = Find(v);
}
} pre[u] = fa;
} int main(){
int T;
scanf("%d" ,&T);
while(T --){
int n , x, y;
scanf("%d" , &n);
for(int i = ; i < n - ; i ++){
scanf("%d%d" , &x , &y);
vec[x].push_back(y);
vec[y].push_back(x);
vis[y] = ;
}
for(int i = ; i <= n ; i ++ ){
cout << i << "==========" << endl;
for(int k = ; k < vec[i].size() ; k ++){
cout << vec[i][k] << " ";
}
cout << endl;
}
int q;
scanf("%d",&q);
for(int i = ; i < q ; i ++){
scanf("%d%d" , &x , &y);
query[x].push_back({y , i});
query[y].push_back({x , i});
}
for(int i = ; i <= n ; i ++){
if(vis[i] == ){
memset(vis , ,sizeof(vis));
dfs(i , -);
break;
}
}
for(int i = ; i < q ; i ++){
printf("%d\n" ,ans[i]);
}
}
}
LCA 最近公共祖先 (模板)的更多相关文章
- LCA(最近公共祖先)模板
Tarjan版本 /* gyt Live up to every day */ #pragma comment(linker,"/STACK:1024000000,1024000000&qu ...
- LCA最近公共祖先模板(求树上任意两个节点的最短距离 || 求两个点的路进(有且只有唯一的一条))
原理可以参考大神 LCA_Tarjan (离线) TarjanTarjan 算法求 LCA 的时间复杂度为 O(n+q) ,是一种离线算法,要用到并查集.(注:这里的复杂度其实应该不是 O(n+q) ...
- LCA最近公共祖先模板代码
vector模拟邻接表: #include<iostream> #include<cstdio> #include<cstring> #include<cma ...
- lca最短公共祖先模板(hdu2586)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 #include<iostream> #include<cstdio> ...
- LCA(最近公共祖先)之倍增算法
概述 对于有根树T的两个结点u.v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u.v的祖先且x的深度尽可能大. 如图,3和5的最近公共祖先是1,5和2的最近公共祖先是4 在本篇中我们先介 ...
- lca 最近公共祖先
http://poj.org/problem?id=1330 #include<cstdio> #include<cstring> #include<algorithm& ...
- Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)(转载)
Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)(转载) 转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2 ...
- CodeVs.1036 商务旅行 ( LCA 最近公共祖先 )
CodeVs.1036 商务旅行 ( LCA 最近公共祖先 ) 题意分析 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从 ...
- LCA近期公共祖先
LCA近期公共祖先 该分析转之:http://kmplayer.iteye.com/blog/604518 1,并查集+dfs 对整个树进行深度优先遍历.并在遍历的过程中不断地把一些眼下可能查询到的而 ...
- LCA 近期公共祖先 小结
LCA 近期公共祖先 小结 以poj 1330为例.对LCA的3种经常使用的算法进行介绍,分别为 1. 离线tarjan 2. 基于倍增法的LCA 3. 基于RMQ的LCA 1. 离线tarjan / ...
随机推荐
- 运行python文件时出错SyntaxError: Non-UTF-8 code starting with '\xb5' in file, but no encoding declared;
今天ytkah在运行python文件时出现错误,提示如下,很明显这是没有定义python文件编码引起的问题,那么要怎么解决呢?很简单,在文件头部定义一下就可以了. File "hello.p ...
- RN animated组动画
代码: export default class AnimationGroupScene extends Component { constructor() { super() ) ) ) } com ...
- windows版mysql5.7.18安装
windows版mysql5.7.18安装 初始化命令:C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe --defaults-file=& ...
- python实时得到鼠标的位置
1.#先下载pyautogui库,打开cmd输入pip install pyautogui,回车 2.代码如下: import os,time import pyautogui as pag try: ...
- 我的DIY作品
工欲善其事必先利其器~呵呵~我自己体会从无到有的乐趣~0~ 从Visio到CAD再到Autodesk,你妹的~只有自己才懂~哎~感谢兄弟朋友们的支持! Visio图: CAD图: Autodesk图:
- abap 通过importing 和 exporting 调用其它函数
1:其它函数的(输入或输出)参数名都在=号左边.
- [LeetCode] 559. Maximum Depth of N-ary Tree_Easy tag: DFS
Given a n-ary tree, find its maximum depth. The maximum depth is the number of nodes along the longe ...
- [LeetCode] 35. Search Insert Position_Easy tag: Binary Search
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- Jenkins自动化构建(一)执行selenium+python脚本
Jenkins执行python写的selenium自动化脚本,通常会遇到,执行打不开浏览器,查看jenkins构建Console Output控制台输出信息,发现脚本是执行了的,但是出错了,打开浏览器 ...
- 计数器控件实例 NumericStepper
计数器控件实例 书:158 <?xml version="1.0" encoding="utf-8"?> <s:Application xml ...