80分,WA了两个点,求助
查看原帖
80分,WA了两个点,求助
161221
FL4K楼主2020/8/11 10:59
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
int n, a[20020], ans[20020], maxx;
int cum = 0, ver[20020], Next[20020], head[20020];
void insert(int x, int y) {
	cum++; ver[cum] = y; Next[cum] = head[x]; head[x] = cum;
}
void insert2(int x, int y) {
	insert(x, y); insert(y, x);
}
void dfs(int x, int fax) {
	ans[x] = a[x];
	for (int i = head[x]; i; i = Next[i]) {
		int v = ver[i];
		if (v != fax) {
			dfs(v, x);
			ans[x] += max(0, ans[v]);
		}
	}
	maxx = max(maxx, ans[x]);
}
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
	for (int i = 1; i <= n - 1; i++) {
		int x, y;
		scanf("%d%d", &x, &y);
		insert2(x, y);
	}
	dfs(1, 0);
	printf("%d", maxx);
	return 0;
}

2020/8/11 10:59
加载中...