有问题吗?
查看原帖
有问题吗?
629377
iamajcer楼主2024/2/25 16:06

求助大佬,看了半天没看出来哪里有问题

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

const int N=6005;
int n, happy[N], u1, v1, root=0, f[N][1];
vector<int> a[N];
void dfs(int u, int fa)
{
	f[u][1]=happy[u];
	f[u][0]=0;
	for (int i=0; i<a[u].size(); i++)
	{
		int v=a[u][i];
		
		if (v==fa) continue;
		dfs(v, u);
		
		f[u][0]+=max(f[v][1], f[v][0]);
		f[u][1]+=f[v][0];
	}
}
int main()
{
	scanf("%d", &n);
	for (int i=1; i<=n; i++) scanf("%d", &happy[i]);
	
	root=n*(n+1)/2;
	for (int i=1; i<n; i++)
	{
		scanf("%d%d", &u1, &v1);
		a[u1].push_back(v1);
		a[v1].push_back(u1);
		root-=u1;
	}
	dfs(root, -1);
	
	printf("%d", max(f[root][0], f[root][1]));
	return 0;
} 
2024/2/25 16:06
加载中...