qz,2AC
查看原帖
qz,2AC
577241
违规用户名577241楼主2023/8/7 16:02
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n;
const int maxn=6e3+5;
int ans=-2147483648;
struct node
{
	int u;
	int v;
	int nxt;
};
int a[maxn];
int h[maxn];
node edge[maxn];
int dp[maxn][2];
int fa[maxn];
int tot=0;
void add(int u,int v)
{
	edge[++tot].u=u;
	edge[tot].v=v;
	edge[tot].nxt=h[u];
	h[u]=tot;
}
void dfs(int i)
{
	dp[i][0]=0;
	dp[i][1]=a[i];
	for(int k=h[i];k!=-1;k=edge[k].nxt)
	{
		int j=edge[k].v;
		dfs(j);
		dp[k][0]+=max(dp[j][0],dp[j][1]);
		dp[k][1]+=dp[j][0];
	}
}
int main()
{
	memset(h,-1,sizeof(h));
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	int k,l;
	for(int i=0;i<n-1;i++)
	{
		scanf("%d%d",&l,&k);
		add(k,l);
		fa[l]=k;
	}
	int root=0;
	for(int i=1;i<=n;i++)
	{
		if(fa[i]==0)
		{
			root=i;
			break;
		}
	}
	dfs(root);
	ans=max(dp[root][0],dp[root][1]);
	cout<<ans<<endl;
	return 0;
}
2023/8/7 16:02
加载中...