【2020】百度校招笔试卷之树上上升序列

94 阅读1分钟

一.题目

image.png

二. 代码

日后可能会补上一些注释和解析

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static int max;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] a = new int[n + 1];
        for(int i = 1 ;i <= n; i++) {
            a[i] = in.nextInt();
        }
        ArrayList<Integer>[] graph = new ArrayList[n + 1];
        max = 0;
        for(int i =0 ;i <= n; i ++) {
            graph[i] = new ArrayList<>();
        } 
        for(int i = 0; i < n - 1; i++) {
            int l = in.nextInt();
            int r = in.nextInt();
            graph[l].add(r);
            graph[r].add(l);
        }
        for(int i =1; i<= n;i ++) {
            dfs(graph, a, i,0);
        }
        System.out.println(max);

    }
    public static void dfs(List<Integer>[] a, int[] u , int now, int length) {
        length++;
        max = Math.max(max, length);
        List<Integer> as = a[now];
        for(int i : as) {
            if(u[i] > u[now]) {
                dfs(a, u , i, length);
            }
        }
    }
}