比赛 2009noip模拟试卷 评测结果 AAAAAAAAAA
题目名称 火车站饭店 最终得分 100
用户昵称 灰里城 运行时间 0.347 s
代码语言 C++ 内存使用 3.12 MiB
提交时间 2016-10-09 15:17:54
显示代码纯文本
#include "iostream"
#include "cstdio"
#include "cmath"
using namespace std;

const int maxn=100000+10;

int mon[maxn];
int tot=0,head[maxn];
struct E{
	int to,nxt;
}e[maxn<<1];
int f[maxn][2];
bool vis[maxn]={false};

void Add(int a,int b){
	e[++tot].to=b;
	e[tot].nxt=head[a];
	head[a]=tot;
}
void dfs(int x){
	vis[x]=true;
	f[x][1]=mon[x];f[x][0]=0;
	for(int i=head[x];i;i=e[i].nxt){
		int t=e[i].to;
		if(!vis[t]){
			dfs(t);
			f[x][1]+=f[t][0];
			f[x][0]+=max(f[t][0],f[t][1]);
		}
	}
}
int main(){
	freopen("profitz.in","r",stdin);
	freopen("profitz.out","w",stdout);
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d",&mon[i]);
	for(int i=1;i<n;++i){
		int a,b;
		scanf("%d%d",&a,&b);
		Add(a,b);Add(b,a);
	}
	dfs(1);
	printf("%d\n",max(f[1][1],f[1][0]));
	// system("pause");
	fclose(stdin);fclose(stdout);
	return 0;
}