蓝桥杯 2015年 第六届 生命之树(JAVA)
package provincial_2015B;
import java.util.ArrayList;
import java.util.Scanner;
public class Ten {
private static int[] weight;
private static long[] total;
private static ArrayList<ArrayList<Integer>> graph;
private static long ans;
public static void dfs(int root, int father) {
for(int i = 0; i < graph.get(root).size(); i++) {
int cur = graph.get(root).get(i);
if(cur==father) continue;
dfs(cur, root);
if(total[cur]>0)
total[root]+=total[cur];
}
if(total[root]>ans) ans=total[root];
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
weight = new int[n+1];
total = new long[n+1];
for(int i = 1; i < n+1; i++) {
int a = scan.nextInt();
weight[i] = a;
total[i] = a;
}
graph = new ArrayList<ArrayList<Integer>>();
for(int i = 0; i < n+1; i++)
graph.add(new ArrayList<Integer>());
for(int i = 0; i < n-1; i++) {
int u = scan.nextInt();
int v = scan.nextInt();
graph.get(u).add(v);
graph.get(v).add(u);
}
dfs(1, 0);
System.out.println(ans);
}
}