比赛 2019级快乐小组模拟赛19.9.19 评测结果 AAAAAAAAAA
题目名称 没有上司的舞会 最终得分 100
用户昵称 瑆の時間~無盡輪迴·林蔭 运行时间 0.000 s
代码语言 C++ 内存使用 1.39 MiB
提交时间 2019-09-18 21:19:47
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<vector>
#define R register
using namespace std;
int dp[6001][2];//0代表自己不参加,1代表自己参加 
int a[6001];
bool root[6001];
vector<int>e[6001];
int n,a1,a2,rt;
void dfs(int x,int fa)
{
	for(R int i=0;i<e[x].size();i++)
	{
		int s=e[x][i];
		if(fa==e[x][i])
		{
			continue;
		}
		dfs(s,x);
		dp[x][0]+=max(dp[s][0],dp[s][1]);
		dp[x][1]+=dp[s][0];
	}
	dp[x][1]+=a[x]; 
}
int LINYIN()
{
	freopen("partyy.in","r",stdin);
	freopen("partyy.out","w",stdout);
	scanf("%d",&n);
	for(R int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(R int i=1;i<n;i++)
	{
		scanf("%d%d",&a1,&a2);
		e[a1].push_back(a2);
		e[a2].push_back(a1);
		root[a1]=1;
	}
	for(R int i=1;i<=n;i++)
	{
		if(root[i]==0)
		{
			rt=i;
			break;
		}
	} 
	dfs(rt,0);
	printf("%d",max(dp[rt][0],dp[rt][1]));
	return 0;
}
int sdd=LINYIN();
int main()
{
	;
}