LCA(最近公共祖先)Tarjan算法
来源:互联网 发布:js toggle 编辑:程序博客网 时间:2024/06/08 10:50
#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <map>using namespace std;const int MAXN = 1000 + 5;vector<int> mp[MAXN],query[MAXN];bool vis[MAXN];int f[MAXN];int ans[MAXN];map<int,int> cs;int n,m;int find(int x){ if(f[x] == x) return x; return f[x] = find(f[x]);}void merge(int u,int v){ int f1 = find(u); int f2 = find(v); if(f1 != f2) f[f2] = f1;}void Tarjan(int u){ for(int i = 0; i<(int)mp[u].size(); i++) { Tarjan(mp[u][i]); merge(u,mp[u][i]); vis[mp[u][i]] = true; } for(int i = 0; i<(int)query[u].size(); i++) { if(vis[query[u][i]]) { if(cs[u*n+query[u][i]] != 0) { ans[cs[u*n+query[u][i]]] = find(query[u][i]); } else { ans[cs[query[u][i]*n+u]] = find(query[u][i]); } } }}int main(){ //设置1为树的根 scanf("%d %d",&n,&m); int x,y; for(int i = 1; i<=m; i++) { scanf("%d %d",&x,&y); mp[x].push_back(y); } memset(vis,false,sizeof(vis)); for(int i = 1; i<=n; i++) f[i] = i; cs.clear(); int q; scanf("%d",&q); for(int i = 1; i<=q; i++) { scanf("%d %d",&x,&y); query[x].push_back(y); query[y].push_back(x); cs[x*n+y] = i; } Tarjan(1); for(int i = 1; i<=q; i++) printf("%d\n",ans[i]); return 0;}
/*一些练习题目
CODEVS 2370 小机房的树
CODEVS 1036 商务旅行
METO CODE 223 拉力赛
HDU 2586 How far way?
ZOJ 3195 Design the city
*/
阅读全文
0 0
- LCA最近公共祖先(tarjan离线算法)
- 最近公共祖先LCA:Tarjan算法
- 最近公共祖先LCA Tarjan算法
- 最近公共祖先LCA Tarjan算法
- 最近公共祖先LCA Tarjan算法
- 最近公共祖先LCA:Tarjan算法
- LCA(最近公共祖先)Tarjan算法
- [算法] LCA 最近公共祖先 (Tarjan)
- 最近公共祖先LCA--Tarjan算法
- 最近公共祖先LCA tarjan
- 【算法】【树】最近公共祖先LCA——Tarjan算法
- 算法摘记 最近公共祖先LCA Tarjan算法
- LCA最近公共祖先——tarjan算法
- Tarjan算法求LCA(最近公共祖先)
- Tarjan离线算法求最近公共祖先(LCA)
- POJ1986 DistanceQueries 最近公共祖先LCA 离线算法Tarjan
- Tarjan离线算法求最近公共祖先(LCA)
- LCA(最近公共祖先)tarjan算法学习笔记
- 为什么空类依旧占有一个字节(sizeof查看)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 E Maximum Flow
- Jquery学习笔记
- vagrant中centos编译安装php7.1.9
- 【XSY1295】calc $n$个点$n$条边无向连通图计数 prufer序列
- LCA(最近公共祖先)Tarjan算法
- 设计模式-策略模式
- 个人对sendmessage理解
- 零基础学编程流程-成为自由人
- RYU REST API学习-调用示例
- C语言结构体全通详解
- ORA-12560:TNS: 协议适配器错误 问题解决
- okhttp网络请求简介
- Linux 命令大全