经典LCA操作。。

贴AC代码

import java.lang.reflect.Array;
import java.util.*;
public class POJ1330 {
// 并查集部分
static int[] p;
static int find(int u){
if(p[u]!=u){
p[u] = find(p[u]);
}
return p[u];
}
static class Edge{
int to;
int next;
}
// 链式前向星
static int[] head;
static Edge[] edges; static boolean[] vist;
// 所求LCA的两点
static int qfrom;
static int qto;
// 找根
static boolean[] isroot; static boolean LCA(int u){
// 在以自己为根的子树中计算LCA
// 如果没找到就回溯到父节点,再向下去兄弟子树计算
// 先建立以自己为代表的并查集
p[u]=u;
vist[u]=true; for(int k=head[u];k>=0;k=edges[k].next){
int to = edges[k].to;
if(!vist[to]) {
// 计算子树
// 如果在某棵子树计算过程中算出结果,就返回true
if(LCA(to))
return true;
// 子树计算完,把子树的并查集代表节点设为当前节点
p[to] = u;
}
}
// 所有子树计算完毕,还没发现结果
// 试试用当前节点计算结果
if(u == qfrom){
if(vist[qto]){
System.out.println(find(qto));
return true;
}
}else if(u==qto){
if(vist[qfrom]){
System.out.println(find(qfrom));
return true;
}
} // 还是没算出结果,向上回溯,准备去兄弟子树计算
return false;
} public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n-- > 0){
int m = sc.nextInt();
p = new int[m+1];
head = new int[m+1];
Arrays.fill(head,-1);
edges = new Edge[m];
vist = new boolean[m+1];
isroot = new boolean[m+1];
Arrays.fill(isroot,true);
// 链式前向星构有向图
for(int i=0;i<m-1;i++){
int from = sc.nextInt();
int to = sc.nextInt();
Edge edge = new Edge();
edge.to=to;
edge.next=head[from];
edges[i]=edge;
head[from]=i;
// 有父节点的不是根
isroot[to]=false;
}
qfrom = sc.nextInt();
qto = sc.nextInt();
// 找根
int root=0;
for(int i=1;i<isroot.length;i++){
if(isroot[i]) {
root = i;
break;
}
}
// 计算LCA
LCA(root);
}
}
}

  

最新文章

  1. java发送GET和post请求
  2. express-11 表单处理(2)
  3. TStringList 常用操作
  4. uilmit 优化
  5. teamcity设置
  6. 济南学习 Day 2 T2 pm
  7. WINDOWS下更改MYSQL数据路径(datadir)后服务启动1067解决不能改变mysql数据库存储位置
  8. Atl笔记二:BEGIN_COM_MAP
  9. ajax跨域解决方案(服务端仅限java)
  10. 判断一个Bitmap图像是否是.9图
  11. ios 工程配置统一增加类的前缀(知识点也只能算知识点)
  12. (转)Vim的Python编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)
  13. STL语法——映射:map 反片语(Ananagrams,UVa 156)
  14. 爬取博主所有文章并保存到本地(.txt版)--python3.6
  15. .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了
  16. node.js http接口调试时请求串行特性分析
  17. 安全测试&#160;一次关于WEB的URL安全测试
  18. BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并
  19. cf1104d二分+数学
  20. JIT物料在途未清PO作为供给

热门文章

  1. JS回调函数深入篇
  2. jQuery autocomplete -默认
  3. C#中读写配置参数文件(利用Windows的API)
  4. 转载 MYSQL性能优化的最佳20+条经验
  5. Python爬虫入门七之正则表达式
  6. redis集群部署及常用的操作命令(上)
  7. MP3 Lame 转换 参数 设置(转)
  8. org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;deptDao_a&#39; defined in class path resource [beansAndHibernate.xml]: Cannot resolve reference to bean &#39;sessionFact
  9. HDU 6007 Mr. Panda and Crystal (背包+spfa)
  10. ListControl的用法