关注
第三题ac代码(树上的最长路径)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @author zhaole.myy
* @date 2019/9/24
*/
public class bd2019092403 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
List<List<Integer>> l = new ArrayList<>();//向下可达
for (int i = 0; i < n; i++) {
l.add(new ArrayList<>());
}
for (int i = 0; i < n - 1; i++) {
int father = sc.nextInt();
int son = sc.nextInt();
if (a[father - 1] < a[son - 1]) l.get(father - 1).add(son - 1);
else if (a[father - 1] > a[son - 1]) l.get(son - 1).add(father - 1);
}
sc.close();
System.out.println(answer(a,l));
}
private static int answer(int[] a, List<List<Integer>> l) {
int[] longest=new int[a.length];
for (int i = 0; i <longest.length ; i++) {
longest[i]=getLongest(i,l);
}
int max=Integer.MIN_VALUE;
for (int i = 0; i <longest.length ; i++) {
if(max<longest[i]) max=longest[i];
}
return max;
}
private static int getLongest(int i,List<List<Integer>> l){
if(l.get(i).size()==0) return 1;
List<Integer> canArrive=l.get(i);
int max=getLongest(canArrive.get(0),l);
for (int j = 1; j < canArrive.size(); j++) {
int t=getLongest(canArrive.get(j),l);
if(max<t) max=t;
}
return max+1;
}
}
查看原帖
点赞 评论
牛客热帖
更多
正在热议
更多
# 面试问题记录 #
36867次浏览 568人参与
# 工作一周年分享 #
16094次浏览 107人参与
# 京东TGT #
37946次浏览 158人参与
# 入职第五天,你被拉进了几个工作群 #
15051次浏览 80人参与
# 机械人,你的第一份感谢信是谁给的 #
24087次浏览 296人参与
# 假如我穿越到了妈妈的18岁 #
2718次浏览 33人参与
# 面试经验谈 #
24506次浏览 370人参与
# 面试吐槽bot #
6960次浏览 57人参与
# 视觉/交互/设计招聘信息汇总 #
11529次浏览 596人参与
# 职场捅娄子大赛 #
267072次浏览 2387人参与
# 国企vs私企,你更想去? #
214097次浏览 2038人参与
# 零跑求职进展汇总 #
2823次浏览 16人参与
# 上班苦还是上学苦呢? #
215654次浏览 1288人参与
# 职场新人生存指南 #
340631次浏览 7286人参与
# 请用你的专业向妈妈表白 #
5807次浏览 60人参与
# 异地恋该为对方跳槽吗 #
29049次浏览 146人参与
# 妈妈治愈了你哪些脆皮时刻 #
7892次浏览 122人参与
# 对妈妈没说出口的话 #
17089次浏览 379人参与
# 硬件人秋招的第一个offer #
67734次浏览 1083人参与
# 硬件人更看重稳定还是高薪 #
43468次浏览 218人参与
# 机械求职避坑tips #
43143次浏览 356人参与