建议加强数据,附Hack数据
查看原帖
建议加强数据,附Hack数据
667180
Assassin_HG楼主2024/10/21 17:08

以下代码可以通过

#include<bits/stdc++.h>
using namespace std;
const int maxn = 6e3+10;
int a[maxn], dis[maxn], head[maxn];
int n, ans1 = 0 , ans2 = 0 , len = 0;
struct Node {
	int nxt, to;
} e[maxn << 1];
void add(int u, int v) {
	e[++len].nxt = head[u];
	e[len].to = v;
	head[u] = len;
}
void dfs(int u, int fa, int dep) {
	dis[u] = dep;
	if(dep % 2==0) {
		ans1 += a[u];
	} else {
		ans2 += a[u];
	}
	for(int i = head[u]; i; i = e[i].nxt) {
		int v = e[i].to;
		if(v==fa) {
			continue;
		}
		dfs(v, u , dep+1);
	}
}
int main() {
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i) {
		scanf("%d", &a[i]);
		a[i] = max(0, a[i]);
	}
	for(int i = 1, u, v; i <= n-1; ++i) {
		scanf("%d%d", &u, &v);
		add(u, v);
		add(v, u);
	}
	dfs(1, 0, 1);
	printf("%d", max(ans1, ans2));
	return 0;
}

其思想如下图:

ans1ans1 加单数层, ans2ans2 加双数层,遇到复数直接不加,即可通过。

如果加强代码,每遇到一个负数,重新定义 depdep 值,则可以通过绝大多数的负数位置,但遇到以下样例就不合适了

10
2
2
1
5
2
2
2
1
1
4
1 3
2 3
5 3
4 5
6 4
7 4
8 6
9 8
10 9

若以前面的方式输出为 1111,但正确答案为 1414

2024/10/21 17:08
加载中...