警钟撅寄+求助63pts
查看原帖
警钟撅寄+求助63pts
719978
DYYqwq楼主2023/1/17 09:25

dfsdfs中在forfor循环前面一定要打初始化!(cpp dp[u] = a[u] )

以上是警示后人


以下是求助

#include<bits/stdc++.h>
using namespace std;
struct node
{
	int to , nxt;
}e[16010];
int n , ans;
int a[16010];
int head[16010] , tot;
int dp[16010];
void add(int u , int v)
{
	++ tot;
	e[tot].to = v;
	e[tot].nxt = head[u];
	head[u] = tot;
}
void dfs(int u , int fa)
{
	dp[u] = a[u]; // Au!!
	for(int i = head[u] ; i != 0 ; i = e[i].nxt)
	{
		int v = e[i].to;
		if(v == fa) continue;
		dfs(v , u);
		dp[u] += (dp[v] > 0 ? dp[v] : 0);
	}
}
int main()
{
	scanf("%d" , &n);
	for(int i = 1 ; i <= n ; i ++)
		scanf("%d" , &a[i]);
	for(int i = 1 ; i < n ; i ++)
	{
		int u , v;
		scanf("%d%d" , &u , &v);
		add(u , v);
		add(v , u);
	}
	dfs(1 , 0);
	for(int i = 1 ; i <= n ; i ++)
		ans = max(ans , dp[i]);
	printf("%d" , ans);
	return 0;
}
2023/1/17 09:25
加载中...