北邮OJ-257- 最近公共祖先-软件14 java
思路分析:思路应该比较简单也很容易想的来,就是比较两个节点的最近的祖先节点,要对每个节点依次记录下他的所有祖先节点,包括其自己,因为自己也算自己的祖先节点,这一点题目中没有明确指出 所以比较坑。
我们可以用一个数组表示某个节点的父节点是谁,在判断的时候顺着数组遍历下去就能达到根节点1,并依次记录下该节点的所有的祖先节点。再与另外一个节点的所有的祖先进行比较。
Problem C. 最近公共祖先
题目描述
给出一棵有N个节点的有根树TREE(根的编号为1),对于每组查询,请输出树上节点u和v的最近公共祖先。
最近公共祖先:对于有向树TREE的两个结点u,v。最近公共祖先LCA(TREE u,v)表示一个节点x,满足x是u、v的祖先且x的深度尽可能大。
输入格式
输入数据第一行是一个整数T(1<=T<=100),表示测试数据的组数。
对于每组测试数据:
第一行是一个正整数N(1<=N<=100),表示树上有N个节点。
接下来N-1行,每行两个整数u,v(1<=u,v<=N),表示节点u是v的父节点。
接下来一行是一个整数M(1<=M<=1000),表示查询的数量。
接下来M行,每行两个整数u,v(11<=u,v<=N),表示查询节点u和节点v的最近公共祖先。
输出格式
对于每个查询,输出一个整数,表示最近公共祖先的编号,
输入样例
2
3
1 2
1 3
1
2 3
4
1 2
1 3
3 4
2
2 3
3 4
1
1
3
package test;
import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Scanner;
public class ZuijinZuxianMain {
static Scanner scan = new Scanner(new BufferedInputStream(System.in));
static int tree[];
public static void main(String[] args) {
int T = scan.nextInt();
for(int i = 0 ;i<T;i++){
int N = scan.nextInt();
tree = new int[N+1];
for(int j = 1;j<=N-1;j++){
int a = scan.nextInt();
int b = scan.nextInt();
tree[b] = a; //数组的值为其父节点
}
int M = scan.nextInt();
for(int k = 0;k<M;k++){
int c = scan.nextInt();
int d = scan.nextInt();
panduan(c,d);
}
}
}
private static void panduan(int c,int d) {
int flagc =c,flagd=d;
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(c);
while(tree[flagc]!=0){
list.add(tree[flagc]);
flagc = tree[flagc];
}
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(d);
while(tree[flagd]!=0){
list1.add(tree[flagd]);
flagd = tree[flagd];
}
for(int i1=0;i1<=list.size();i1++){
if(list1.contains(list.get(i1))){
System.out.println(list.get(i1));
break;
}
}
}
}
北邮OJ-257- 最近公共祖先-软件14 java的更多相关文章
- 北邮oj 104. 912星球的研究生
104. 912星球的研究生 时间限制 1000 ms 内存限制 65536 KB 题目描述 最近912星球的研究生入学了,912星球的教务处因此忙的焦头烂额,要求yzr做一个信息管理系统登陆查询研究 ...
- 北邮oj 97. 二叉排序树
97. 二叉排序树 时间限制 1000 ms 内存限制 65536 KB 题目描述 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 若左子树非空,则左子树上所有节 ...
- 北邮oj 题
题目描述 Every year,prince prepares a birthday gift for princess.The gift is a box,which is decorated wi ...
- 北邮OJ
90. 字符串转换 时间限制 1000 ms 内存限制 65536 KB 题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而" ...
- 【经验总结】北邮OJ
90. 字符串转换 时间限制 1000 ms 内存限制 65536 KB 题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而" ...
- 北邮OJ 89. 统计时间间隔 java版
89. 统计时间间隔 时间限制 1000 ms 内存限制 65536 KB 题目描述 给出两个时间(24小时制),求第一个时间至少要经过多久才能到达第二个时间.给出的时间一定满足的形式,其中x和y分别 ...
- 中南oj 1213: 二叉树结点公共祖先
1213: 二叉树结点公共祖先 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 159 Solved: 87 [Submit][Status][Web ...
- LeetCode OJ:Lowest Common Ancestor of a Binary Tree(最近公共祖先)
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
- LeetCode OJ:Lowest Common Ancestor of a Binary Search Tree(最浅的公共祖先)
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...
随机推荐
- dagger2的Qualifier与Scope
Qualifier即Named 当module的@Provides提供相同变量的不同属性时:用于区分把哪一个初始化 Module 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- 在使用vue+webpack模版创建的项目中使用font-awesome
前言:最近使用vue+webpack进行一个小项目的开发,按照官方模版文档完成项目初始化后打算引入ont-awesome字体图标库进行使用,引入过程中遇到一些问题并解决,现记录如下. 一开始进展很顺利 ...
- Sublime Text3 旧版本下载以及破解激活方式
前言 当前Sublime Text3 出到了32**版本,以前直接输入激活码的方法已经不能使用. 而官网又不提供旧版本的下载链接,因此在此分享旧版本下载方式以及激活方式. 下载方法 通过下面这个链接下 ...
- 爬虫使用中间代理人 fiddl...,charles,mitmproxy 设置
一般的设置在网上就能找到(端口,ip啥的) 但是难点是关于安卓手机证书 在网上找到的几种方法,一种是在app源码中添加设置让手机app同意你下载安装的证书,另一种则是root_adb 安装证书 但是太 ...
- Python 3:ImportError “No Module named Setuptools”的解决方法
sudo apt-get install python-setuptools python3-setuptools
- celery异步任务 定时任务
以前项目中用到过 celery ,但是没怎么记笔记,现在在记一下,方便以后用. Celery.png 问:Celery 是什么? 答:Celery 是一个由 Python 编写的简单.灵活.可靠的 ...
- scrapy的扩展件extensions
extensions.py文件 # -*- coding: utf-8 -*- # 该扩展会在以下事件时记录一条日志: # spider被打开 # spider被关闭 # 爬取了特定数量的条目(ite ...
- 028.核心组件-API Server
一 Kubernetes API Server原理 1.1 API Server功能 Kubernetes API Server的核心功能是提供Kubernetes各类资源对象(如Pod.RC.Ser ...
- iframe的父子层跨域 用了百度的postMessage()方法
父层:第一个是方法申明 第二个是接收子层过来的数据 <script type="text/javascript"> $("#main").load( ...
- vue练手项目——桌面时钟
用vue实现一个简单的网页桌面时钟,主要包括时钟显示.计时.暂停.重置等几个功能. 效果图如下,页面刚进来的时候是一个时钟,时钟上显示的时.分.秒为当前实际时间,点击计时器按钮后,页面变成一个计时器, ...