POJ1330 Nearest Common Ancestors (JAVA)
2024-09-28 16:11:30
经典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);
}
}
}
最新文章
- java发送GET和post请求
- express-11 表单处理(2)
- TStringList 常用操作
- uilmit 优化
- teamcity设置
- 济南学习 Day 2 T2 pm
- WINDOWS下更改MYSQL数据路径(datadir)后服务启动1067解决不能改变mysql数据库存储位置
- Atl笔记二:BEGIN_COM_MAP
- ajax跨域解决方案(服务端仅限java)
- 判断一个Bitmap图像是否是.9图
- ios 工程配置统一增加类的前缀(知识点也只能算知识点)
- (转)Vim的Python编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)
- STL语法——映射:map 反片语(Ananagrams,UVa 156)
- 爬取博主所有文章并保存到本地(.txt版)--python3.6
- .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了
- node.js http接口调试时请求串行特性分析
- 安全测试&#160;一次关于WEB的URL安全测试
- BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并
- cf1104d二分+数学
- JIT物料在途未清PO作为供给
热门文章
- JS回调函数深入篇
- jQuery autocomplete -默认
- C#中读写配置参数文件(利用Windows的API)
- 转载 MYSQL性能优化的最佳20+条经验
- Python爬虫入门七之正则表达式
- redis集群部署及常用的操作命令(上)
- MP3 Lame 转换 参数 设置(转)
- 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
- HDU 6007 Mr. Panda and Crystal (背包+spfa)
- ListControl的用法