POJ 1330 Nearest Common Ancestors LCA
2016-05-05 14:40
393 查看
题目:http://poj.org/problem?id=1330
题意:一棵n个点的数,输入n - 1条边,最后输入一组查询,求它们的最近公共祖先
思路:tarjan算法求LCA第一题,模板题
总结:tarjan求强连通,tarjan求双联通,tarjan求LCA,粗糙的学完了。。。
题意:一棵n个点的数,输入n - 1条边,最后输入一组查询,求它们的最近公共祖先
思路:tarjan算法求LCA第一题,模板题
总结:tarjan求强连通,tarjan求双联通,tarjan求LCA,粗糙的学完了。。。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 10010; typedef long long ll; struct edge { int to, cost, next; } G1 , G2 ; int head1 , head2 , par ; int cnt1, cnt2; bool vis , deg ; int n, m; void init() { for(int i = 1; i <= n; i++) par[i] = i; memset(head1, -1, sizeof head1); memset(head2, -1, sizeof head2); memset(deg, 0, sizeof deg); memset(vis, 0, sizeof vis); cnt1 = cnt2 = 0; } void add_edge1(int v, int u) { G1[cnt1].to = u; G1[cnt1].next = head1[v]; head1[v] = cnt1++; } void add_edge2(int v, int u) { G2[cnt2].to = u; G2[cnt2].next = head2[v]; head2[v] = cnt2++; } int ser(int x) { int r = x, i = x, j; while(r != par[r]) r = par[r]; while(i != r) j = par[i], par[i] = r, i = j; return r; } void tarjan_lca(int v) { int u; for(int i = head1[v]; i != -1; i = G1[i].next) { u = G1[i].to; tarjan_lca(u); par[u] = v; } vis[v] = true; /*这个标记的位置很巧妙,求LCA时不能放在函数首部,否则会重复输出某些答案*/ for(int i = head2[v]; i != -1; i = G2[i].next) if(vis[u = G2[i].to]) { printf("%d\n", ser(u)); return; } } int main() { int t, a, b; scanf("%d", &t); while(t--) { scanf("%d", &n); init(); for(int i = 0; i < n - 1; i++) { scanf("%d%d", &a, &b); add_edge1(a, b); deg[b] = true; } scanf("%d%d", &a, &b); add_edge2(a, b); add_edge2(b, a); for(int i = 1; i <= n; i++) if(! deg[i]) /*树根*/ { tarjan_lca(i); break; } } return 0; }
相关文章推荐
- USB-HUB上制定生成的设备号(一种解决方法)
- 自动分配会议桌demo
- python的学习笔记
- 64位ubuntu16.04安装Android Studio
- swift中的convenience
- MyBatis学习总结(三)——优化MyBatis配置文件中的配置
- nginx安装及其配置
- C语言基础: 浮点数转化整数(向上取整、向下取整)| 求绝对值函数
- 欢迎使用CSDN-markdown编辑器
- AngularJS指令进阶 – ngModelController详解
- GIF动画的实现
- jQuery插件ajaxfileupload.js实现上传文件
- 二叉查找树BST
- Lua_第28章 资源管理(上)
- 基于svn的版本发布工具
- 【Bugly干货分享】关于 Android N 那些你不知道的事儿
- elasticsearch 集群搭建
- [Driver] Asix AX88772 kernel module (USB Ethernet)
- 代码的耗时操作
- 代理模式与动态代理