求助, 为什么T三个点
查看原帖
求助, 为什么T三个点
438461
liu_chen_hao楼主2021/8/30 23:16

自我感觉没问题, 为什么会T三个点?

望各位大神指点.

#include <bits/stdc++.h>
using namespace std;

struct node {
	int to;
	int next;
}edge[16005];
int n,tot;
int b[16005];
int head[16005];
int f[16005],ans=-(1<<30);

void dp(int u, int fa)
{
	f[u]=b[u];
	for(int i=head[u]; i; i=edge[i].next)
	{
		int v=edge[i].to;
		if(v==fa) continue;
		dp(v,u);
		f[u]+=max(0,f[v]);
	}
}
void add(int from, int to)
{
	tot++;
	edge[tot].to=to;
	edge[tot].next=head[from];
	head[from]=tot;
}
int main()
{
	scanf("%d", &n);
	for(int i=1; i<=n; i++) scanf("%d", &b[i]);
	for(int i=1; i<n; i++)
	{
		int l,k;
		scanf("%d%d", &l, &k);
		add(l,k);
		add(k,l);
	}
	dp(1,0);
	for(int i=1; i<=n; i++) ans=max(ans,f[i]);
	printf("%d", ans);
	
	return 0;
}
2021/8/30 23:16
加载中...