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 / ...
随机推荐
- 搭建nginx服务器,虚拟主机,反向代理
1 搭建Nginx服务器 1.1 问题 在IP地址为192.168.10. 5的主机上安装部署Nginx服务,并可以将Nginx服务器升级到更高版本,要求编译时启用如下功能: SSL加密功能 查看服务 ...
- [QGLViewer]鼠标取点后回调
纠结的一天:QGLViewer控件重载鼠标事件(AxMapControl类),如何在点击鼠标之后执行一个回调,通知主界面Viewer类执行一个操作. 先是考虑直接使用C风格的回调函数,在AxMapCo ...
- (转)Ctrl+H 浪潮Raid配置文档
说明 本手册适用于LSI芯片Raid卡 包括但不限于Inspur 2008/2108 Raid卡.LSI 9240/9260/9261/9271 等Raid卡. 不同型号的Raid卡在某些功能上的支持 ...
- 【LeetCode每天一题】Search in Rotated Sorted Array(在旋转数组中搜索)
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., ...
- 【Redis】持久化
Redis提供了为持久化提供了两种方法:第一种是快照:他可以将存在某一时刻的所有数据都写入硬盘里面.第二种是只追加文件(AOF):它会在执行命令时,将被执行的写命令复制到硬盘里面. Redis支持持久 ...
- VS Code的golang开发配置 之 代码提示
之前用VS Code的时候,发现自己的代码的提示一直不好,换用JetBrain的Goland的代码提示是好了,但是比较占用资源.在网上找了一些资料,发现很多人也是遇到第三方或者自己的代码无法提示的情况 ...
- https://sweetalert2.github.io/
https://sweetalert2.github.io/
- 利用TensorFlow实现多元逻辑回归
利用TensorFlow实现多元逻辑回归,代码如下: import tensorflow as tf import numpy as np from sklearn.linear_model impo ...
- Ubuntu install mysql database
简要说下ubuntu Linux下安装MySql数据库 一. 安装 # apt-get install mysql-server# apt-get install mysql-client 二.启动 ...
- EntityFrameworkCore概览
.NET Core 中 EntityFrameworkCore的支持库主要有: Script-migration 级联删除 protected override void OnConfiguring( ...