题目:http://poj.org/problem?id=1330

最近公共祖先的离线算法:

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <vector>
using namespace std;
const int N = 10005;
int n;
vector<int> vec[N];
int pre[N];
bool vis[N];
bool root[N];
int u,v;
void Init()
{
for(int i=0; i<N; i++)
{
vec[i].clear();
pre[i] = i;
root[i] = true;
vis[i] = false;
}
}
void Import()
{
scanf("%d",&n);
Init();
for(int i=1; i<n; i++)
{
int a,b;
scanf("%d%d",&a,&b);
vec[a].push_back(b);
root[b] = false;
}
scanf("%d%d",&u,&v);
}
int Find(int x)
{
if(pre[x] != x)
pre[x] = Find(pre[x]);
return pre[x];
}
void Union(int x,int y)
{
x = Find(x);
y = Find(y);
if(x == y) return;
pre[y] = x;
}
void LCA(int par)
{
for(int i=0;i<vec[par].size();i++)
{
LCA(vec[par][i]);
Union(par,vec[par][i]);
}
vis[par] = true;
if(par == u && vis[v] == true)
{
printf("%d\n",Find(v));
return;
}
if(par == v && vis[u] == true)
{
printf("%d\n",Find(u));
return;
}
}
void Work()
{
int T;
scanf("%d",&T);
while(T--)
{
Import();
for(int i=1;i<=n;i++)
{
if(root[i] == true)
{
LCA(i);
break;
}
}
}
}
int main()
{
Work();
return 0;
}

POJ1330(最近公共祖先)相关推荐

  1. POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA)...

    POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA) Description A ...

  2. 例题 - 最近公共祖先 - 离线算法

    贴几篇LCA知识点的博客详解: CSDN - 青烟绕指柔!的博客 - 倍增算法 CSDN - Nekroz_的博客 CSDN - Dust_Heart的博客 CSDN - creatorx的博客 -T ...

  3. LCA 最近公共祖先

    LCA ,也就是最近公共祖先是什么意思呢. 下面这张图可能会让你清楚的明白什么是最近公共祖先. 对于初始点,前提是它能构成一棵不成环的树,之所以不能成环,从定义就看出来了嘛,如果成环,是不是有种1是3 ...

  4. 有一个1亿结点的树,已知两个结点, 求它们的最低公共祖先!

    对该问题,分为如下几种情形讨论: 情形一: 假如该树为二叉树,并且是二叉搜索树, 依据二叉搜索树是排过序的, 我们只需要从树的根结点开始,逐级往下,和两个输入的结点进行比较. 如果当前结点的值比两个结 ...

  5. 二叉树:最近的公共祖先 Lowest Common Ancestor of a Binary Tree

    已知二叉树,求二叉树中给定的两个节点的最近公共祖先. 最近公共祖先: 两节点v与w的最近公共祖先u,满足在树上最低(离根最 远),且v,w两个节点都是u的子孙. 如上二叉树,6和8号节点的公共祖先有4 ...

  6. Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)...

    转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图 ...

  7. LeetCode实战:二叉树的最近公共祖先

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  8. LeetCode实战:二叉搜索树的最近公共祖先

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  9. 0x63.图论 - 树的直径与最近公共祖先

    目录 一.树的直径(Diameter) 1.树形DP求树的直径 2.两次BFS/DFS求树的直径 1.POJ 1985.Cow Marathon(DFS求树的直径模板题) 2.AcWing 350. ...

最新文章

  1. 解决ModuleNotFoundError: No module named ‘pip‘问题
  2. 内连级元素有哪些_CSS里有哪些常见的块级元素和行内元素?
  3. I.MX6 Android busybox 从哪里生成的
  4. 【XAudio2】3.关键概念
  5. 【JS】执行上下文(ExcecutionContext)
  6. (笔记)Linux服务器中判断客户端socket断开连接的方法
  7. 前后台交互经常使用的技术汇总(后台:Java技术,前台:Js或者Jquery)
  8. 整合Flask中的目录结构
  9. 职业生涯最差绩效:M-
  10. html加载js那些事
  11. CocoaPods 报错 [!] Error installing JSONModel
  12. 2019年互联网大厂月饼大盘点,最丑的一家竟然是...
  13. 清除img和文字间的空隙【vertical-align的用途】
  14. CPC客户端编写新申请时报错异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
  15. 周育如的音标口诀大全_音标记忆顺口溜(48个),快速记忆音标口诀!
  16. MindMaster Pro 8.0.0 — 亿图思维导图
  17. 财务会计中会计科目的基础
  18. 科技云报道:服务数字中国,青云十周年迎来“成年礼”
  19. 孩子,外面的世界不会轻易原谅你…
  20. 五分钟看懂同城小程序是什么,能做什么!

热门文章

  1. 关于Spring Bean实例注册的流程
  2. Spring 核心价值
  3. 微服务网关-Gateway-LoadBalancerClient实现负载均衡讲解
  4. RocketMQ错误消息重试策略之Consumer的重试机制(Exception情况)
  5. Zuul:Cookie和动态路由
  6. jvm_垃圾收集算法讲解(一)
  7. Netty--Reactor模式
  8. python实时获取子进程输出_Python 从subprocess运行的子进程中实时获取输出的例子...
  9. win32 输出文字时清除之前的_努力学习没效果?3个步骤,强化沟通输出,实现飞跃式成长...
  10. linux网络保存退出,linux编辑文件后如何保存退出