第二个测试数据有毒,数据下载下到本地跑的结果正确,但一旦放上去评测就挂了
查看原帖
第二个测试数据有毒,数据下载下到本地跑的结果正确,但一旦放上去评测就挂了
441248
19moyudaren楼主2022/3/29 21:12
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main {
	
	static int[] h;
	static Map<Integer, List<Integer>> adjvex=new HashMap<>();
	static int[][] dp;
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		h=new int[n+1];
		dp=new int[n+1][2];
		for (int i = 1; i <= n; i++) {
			h[i]=in.nextInt();
		}
		boolean[] flags=new boolean[6005];
		for (int i = 1; i <= n-1; i++) {
			int l=in.nextInt(),k=in.nextInt();
			adjvex.putIfAbsent(k, new ArrayList<>());
			adjvex.get(k).add(l);
			flags[l]=true;
		}
		int root=0;
		for (int i = 1; i <= n; i++) {
			if(!flags[i]) {root=i;break;};
		}
		dfs(root);
		System.out.println(Math.max(dp[root][0], dp[root][1]));
		in.close();
	}
	private static void dfs(int x) {
		dp[x][0]=0;
		dp[x][1]=h[x];
		for (int i = 0;adjvex.get(x)!=null&&i < adjvex.get(x).size(); i++) {
			int y=adjvex.get(x).get(i);
			dfs(y);
			dp[x][0]+=Math.max(dp[y][0], dp[y][1]);
			dp[x][1]+=dp[y][0];
		}
	}

}
2022/3/29 21:12
加载中...