比赛 2019级快乐小组模拟赛19.9.19 评测结果 AAAAAAAAAA
题目名称 没有上司的舞会 最终得分 100
用户昵称 ShallowDream雨梨 运行时间 0.018 s
代码语言 C++ 内存使用 13.80 MiB
提交时间 2019-09-22 10:13:42
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int maxn=6005;
int f[maxn][2];
int q,w,b[maxn],tot,head[maxn];
struct _{int to,next;}a[maxn];
bool vis[maxn];
void add(int x,int y){
	tot++;
	a[tot].to=y;
	a[tot].next=head[x];
	head[x]=tot;}
	void dfs(int x){
	f[x][1]=b[x];
	for(int i=head[x];i;i=a[i].next){
		int to=a[i].to;
	dfs(to);
	f[x][0]+=max(f[to][0],f[to][1]);
	f[x][1]+=f[to][0];
			
		}}
int main(){
	freopen("partyy.in","r",stdin);
	freopen("partyy.out","w",stdout);
	int n;cin>>n;
	for(int i=1;i<=n;i++)cin>>b[i];
	for(int i=1;i<n;i++)cin>>q>>w,vis[q]=1,add(w,q);
	cin>>q>>w;
	int root;
	for(int i=1;i<=n;i++){
	if(vis[i]==0){root=i;break;	}}
	dfs(root);
	cout<<max(f[root][0],f[root][1]);
return 0;
}