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

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

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的更多相关文章

  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. BFC 浅谈

    写在前面 Block formatting context (块级格式化上下文) 页面文档由块block构成 每个block在页面上占据自己的位置使用新的元素构建BFC overflow:hidden ...

  2. 关于C++类中的三兄弟(pretect、private、public)

    1.public修饰的成员变量 在程序的任何地方都可以被访问,就是公共变量的意思,不需要通过成员函数就可以由类的实例直接访问 2.private修饰的成员变量 只有类内可直接访问,私有的,类的实例要通 ...

  3. Haproxy 使用block 阻止域名访问到某个子目录报403

    配置教程如下: acl is_https_com hdr_beg(host) www.baidu.com #定义规则域名 acl api_block_url_web url_dir -i /web/ ...

  4. NOI Online 赛前刷题计划

    Day 1 模拟 链接:Day 1  模拟 题单:P1042 乒乓球  字符串 P1015 回文数  高精 + 进制 P1088 火星人  搜索 + 数论 P1604 B进制星球  高精 + 进制 D ...

  5. Java2变量和运算符

    课后作业:[必做题] 1√AB互换 已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序.(知识点:变量和运算符综合应用) [必做题] package com.two; public clas ...

  6. org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xE2\x80\x8B\xE2\x80\x8B...' for column 'pro_backgroud' at row

    如果你在mysql数据库中,将所有的表的编码格式设置成为utf-8之后还是不行,那就试试这个吧:ALTER TABLE your_database_name.your_table CONVERT TO ...

  7. 什么是Activiti

    什么是Activiti Activiti属于工作流引擎的一个开源实现.Activiti由Tom Bayen发起.在2010年5月发布了第一个版本.命名也很有意思的采取了Activities(活动)的化 ...

  8. ionic监听android返回键(实现“再按一次退出”功能)

    在android平台上的app,在主页面时经常会遇到"再按一次退出app"的功能,避免只按一下返回键就退出app提升体验优化. 1.这个功能需要我们用到ionic提供的regist ...

  9. python之函数介绍

    # 函数 # 什么是函数: 能完成特定功能的工具,在Python中表示能完成特定功能的代码块.(函数定义) # 为什么要用函数 :①函数可以重复调用出来,效率高,而且维护成本低 ②使程序结构看起来清晰 ...

  10. SpringBoot图文教程15—项目异常怎么办?「跳转404错误页面」「全局异常捕获」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...