java_day18

目标:Java web开发

问题:算最大快乐指数

import java.io.*;
import java.util.*;

class Main{
    static final int N=6010;
    static int[] h=new int[N],e=new int[N],ne=new int[N];
    static int idx;
    static int[] Hy=new int[N];
    static int[][] f=new int[N][2];
    static boolean[] st=new boolean[N];
    static BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    static void add(int u, int v){
        e[idx]=v;ne[idx]=h[u];h[u]=idx++;
    }
    static void dfs(int u){
        f[u][1]=Hy[u];
        for(int i=h[u];i!=-1;i=ne[i]){
            int j=e[i];
            dfs(j);
            f[u][0]+=Math.max(f[j][1],f[j][0]);
            f[u][1]+=f[j][0];
        }
    }
    public static void main(String[] args) throws IOException{
        Arrays.fill(h, -1);//h所有元素赋值-1
        int n=Integer.parseInt(in.readLine());
        for(int i=1;i<=n;i++){
            int h=Integer.parseInt(in.readLine());
            Hy[i]=h;
        }

        for(int i=0;i<n-1;i++){
            String[] cur=in.readLine().split(" ");
            int u=Integer.parseInt(cur[0]);
            int v=Integer.parseInt(cur[1]);
            add(v,u);
            st[u]=true;
        }
        int r=1;
        while(st[r]) r++;
        dfs(r);
        System.out.println(Math.max(f[r][0],f[r][1]));
    }
}
posted @ 2021-07-26 21:57  zhuangzhongxu  阅读(42)  评论(0)    收藏  举报