比赛 20151026 评测结果 AAAAAAAAAA
题目名称 火车站饭店 最终得分 100
用户昵称 Hallmeow 运行时间 0.252 s
代码语言 C++ 内存使用 6.45 MiB
提交时间 2017-10-16 19:43:55
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
#define pos2(i,a,b) for(int i=(a);i>=(b);i--)
#define N 201000
#define LL long long
using namespace std;
int n;
struct haha{
	int next,to;
}edge[N*2];
int cnt=1,head[N];
void add(int u,int v){
	edge[cnt].to=v;edge[cnt].next=head[u];head[u]=cnt++;
}
int f[N][3];
void dp(int x,int fa){
	for(int i=head[x];i;i=edge[i].next){
		int to=edge[i].to;
		if(to!=fa){
			dp(to,x);
			f[x][1]+=f[to][0];
			f[x][0]+=max(f[to][0],f[to][1]);
		}
	}
}
int main(){
	freopen("profitz.in","r",stdin);
	freopen("profitz.out","w",stdout);
	scanf("%d",&n);
	pos(i,1,n){
		scanf("%d",&f[i][1]);
	}
	pos(i,1,n-1){
		int x,y;scanf("%d%d",&x,&y);
		add(x,y);add(y,x);
	}
	dp(1,0);
	cout<<max(f[1][0],f[1][1]);
	return 0;
}