思路分析:思路应该比较简单也很容易想的来,就是比较两个节点的最近的祖先节点,要对每个节点依次记录下他的所有祖先节点,包括其自己,因为自己也算自己的祖先节点,这一点题目中没有明确指出 所以比较坑。

我们可以用一个数组表示某个节点的父节点是谁,在判断的时候顺着数组遍历下去就能达到根节点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的最近公共祖先。 

输出格式 

对于每个查询,输出一个整数,表示最近公共祖先的编号, 

输入样例 





1 2 

1 3 



2 3 



1 2 

1 3 

3 4 



2 3 

3 4 





3

  1. package test;
  2. import java.io.BufferedInputStream;
  3. import java.util.ArrayList;
  4. import java.util.Scanner;
  5. public class ZuijinZuxianMain {
  6. static Scanner scan = new Scanner(new BufferedInputStream(System.in));
  7. static int tree[];
  8. public static void main(String[] args) {
  9. int T = scan.nextInt();
  10. for(int i = 0 ;i<T;i++){
  11. int N = scan.nextInt();
  12. tree = new int[N+1];
  13. for(int j = 1;j<=N-1;j++){
  14. int a = scan.nextInt();
  15. int b = scan.nextInt();
  16. tree[b] = a; //数组的值为其父节点
  17. }
  18. int M = scan.nextInt();
  19. for(int k = 0;k<M;k++){
  20. int c = scan.nextInt();
  21. int d = scan.nextInt();
  22. panduan(c,d);
  23. }
  24. }
  25. }
  26. private static void panduan(int c,int d) {
  27. int flagc =c,flagd=d;
  28. ArrayList<Integer> list = new ArrayList<Integer>();
  29. list.add(c);
  30. while(tree[flagc]!=0){
  31. list.add(tree[flagc]);
  32. flagc = tree[flagc];
  33. }
  34. ArrayList<Integer> list1 = new ArrayList<Integer>();
  35. list1.add(d);
  36. while(tree[flagd]!=0){
  37. list1.add(tree[flagd]);
  38. flagd = tree[flagd];
  39. }
  40. for(int i1=0;i1<=list.size();i1++){
  41. if(list1.contains(list.get(i1))){
  42. System.out.println(list.get(i1));
  43. break;
  44. }
  45. }
  46. }
  47. }

北邮OJ-257- 最近公共祖先-软件14 java的更多相关文章

  1. 北邮oj 104. 912星球的研究生

    104. 912星球的研究生 时间限制 1000 ms 内存限制 65536 KB 题目描述 最近912星球的研究生入学了,912星球的教务处因此忙的焦头烂额,要求yzr做一个信息管理系统登陆查询研究 ...

  2. 北邮oj 97. 二叉排序树

    97. 二叉排序树 时间限制 1000 ms 内存限制 65536 KB 题目描述 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 若左子树非空,则左子树上所有节 ...

  3. 北邮oj 题

    题目描述 Every year,prince prepares a birthday gift for princess.The gift is a box,which is decorated wi ...

  4. 北邮OJ

    90. 字符串转换 时间限制 1000 ms 内存限制 65536 KB 题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而" ...

  5. 【经验总结】北邮OJ

    90. 字符串转换 时间限制 1000 ms 内存限制 65536 KB 题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而" ...

  6. 北邮OJ 89. 统计时间间隔 java版

    89. 统计时间间隔 时间限制 1000 ms 内存限制 65536 KB 题目描述 给出两个时间(24小时制),求第一个时间至少要经过多久才能到达第二个时间.给出的时间一定满足的形式,其中x和y分别 ...

  7. 中南oj 1213: 二叉树结点公共祖先

    1213: 二叉树结点公共祖先 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 159  Solved: 87 [Submit][Status][Web ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. Soulwail

    XMLHttpRequest 属性解读 首先在 Chrome console 下创建一个 XMLHttpRequest 实例对象 xhr.如下所示: inherit 试运行一下代码. var xhr ...

  2. Fragment argument

    每个Fragment实例都可以附带一个Bundle对象,该bundle包含键值对,可以像附加extra到Activity的intent中那样使用他们.一个键值对即一个argument. 创建frage ...

  3. 连接器巨头Molex莫仕大裁员,CEO更迭

    序言:中美贸易战的大环境下,美国多方面限制对华出口电子科技,其中影响最大的莫过于限制芯片出口,中国本土芯片和电子产业也在蓬勃的发展.根据正能量电子了解连接器巨头MOLEX莫仕公司收入的1/3是来自于对 ...

  4. yii2设置默认控制器

    以Yii2高级模板配置为例

  5. 组件(4):使用slot进行内容分发

    组件的作用域(一) 父组件模板的内容在父组件作用域内编译:子组件模板的内容在子组件作用域内编译. 父子组件的编译相互独立,编译时只能使用各自作用域中的属性和方法,例如,你不可以在父组件模板内,将一个指 ...

  6. CSS-水平居中、垂直居中、水平垂直居中

    1.水平居中 水平居中可分为行内元素水平居中和块级元素水平居中 1.1 行内元素水平居中 这里行内元素是指文本text.图像img.按钮超链接等,只需给父元素设置text-align:center即可 ...

  7. Python正则表达式语法

    单个字符匹配 字符 匹配 . 匹配任意字符(除了\n) [...] 匹配字符集 \d/\D 匹配数字/非数字 \s/\S 匹配空白/非空白字符 \w/\W 匹配单词字符[a-zA-A0-9] In [ ...

  8. String常见的方法有哪些?

    length();//计算字符串的长度 charAt();//截取一个字符 getChars();//截取多个字符 equals();//比较两个字符串 equalsIgnoreCase();//比较 ...

  9. MySQL 【常识与进阶】

    MySQL 事物 InnoDB事务原理 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致性状态转换为另一种一致性状态. 在数据库提交时,可以确保要么所有修改 ...

  10. go 广度搜索案例(迷宫)

    package main import ( "fmt" "os" ) /* *将文档结构读入到切片中(二维数组) *row, col 行数 列数 (文档第一行数 ...