求助,第5个点WA了QWQ
查看原帖
求助,第5个点WA了QWQ
909068
sccogg楼主2024/3/2 14:24
#include <iostream>

using namespace std;

const int maxn = 16000;

int n, beauty[maxn], head[maxn], dp[maxn], visited[maxn], edgenum;
struct node {
	int to;
	int next;
}edge[maxn * 3];

void add(int u, int v)
{
	edge[++edgenum].to = v;
	edge[edgenum].next = head[u];
	head[u] = edgenum;
	edge[++edgenum].to = u;
	edge[edgenum].next = head[v];
	head[v] = edgenum;
}

void dfs(int root)
{
	dp[root] = beauty[root];
	visited[root] = 1;
	for (int i = head[root]; i; i = edge[i].next)
	{
		if (visited[edge[i].to]) continue;
		dfs(edge[i].to);
		if (dp[edge[i].to] > 0)
			dp[root] += dp[edge[i].to];
	}
}

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> beauty[i];
	for (int i = 1; i < n; i++)
	{
		int a, b;
		cin >> a >> b;
		add(a, b);
	}
	dfs(1);
	int maxs = -0x7fffffff;
	for (int i = 1; i <= n; i++)
		maxs = maxs > dp[i] ? maxs : dp[i];
	cout << maxs;
	return 0;
}
2024/3/2 14:24
加载中...