关注
第三题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;
}
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 职场捅娄子大赛 #
298975次浏览 2986人参与
# 上班苦还是上学苦呢? #
220185次浏览 1301人参与
# 华泰证券Fintech星战营 #
164674次浏览 186人参与
# 写给毕业5年后的自己 #
1115次浏览 23人参与
# 如何缓解求职过程中的焦虑? #
3448次浏览 60人参与
# 华为求职进展汇总 #
4625890次浏览 28177人参与
# 好好告别我的学生时代 #
15957次浏览 338人参与
# 晒一下我的毕业照 #
23354次浏览 200人参与
# 简历无回复,你会继续海投还是优化再投? #
67687次浏览 693人参与
# 互联网行业现在还值得去吗 #
16593次浏览 54人参与
# 记录实习开销 #
12639次浏览 96人参与
# 2025,我想...... #
47902次浏览 459人参与
# 节后第一天上班,我的精神状态 #
8976次浏览 80人参与
# 工作两年想退休了 #
118199次浏览 1098人参与
# 考公VS就业,你怎么选? #
57922次浏览 388人参与
# 运营来爆料 #
42866次浏览 320人参与
# 00后45度躺现状 #
92591次浏览 478人参与
# 来聊聊机械薪资天花板是哪家 #
121769次浏览 736人参与
# 机械人,签完三方你在忙什么? #
48402次浏览 211人参与
# 如何KTV领导 #
55093次浏览 413人参与
# 租房前辈的忠告 #
167395次浏览 6344人参与