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]));
}
}

浙公网安备 33010602011771号