比赛 20151026 评测结果 AAAAAAAAAA
题目名称 火车站饭店 最终得分 100
用户昵称 hzoi_xx 运行时间 0.254 s
代码语言 C++ 内存使用 4.51 MiB
提交时间 2017-10-16 21:22:58
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define N 100005
using namespace std;
struct line{
	int u,v,nt;
}ln[N*2];
int n,u,v,f[N][3],w[N],adj[N],e;
void push(int u,int v){
	ln[++e]=(line){u,v,adj[u]};adj[u]=e;
	ln[++e]=(line){v,u,adj[v]};adj[v]=e;
}
void dfs(int x,int fa){
	f[x][1]=w[x];
	for(int i=adj[x];i;i=ln[i].nt){
		int v=ln[i].v;
		if(v==fa) continue;
		dfs(v,x);
		f[x][0]+=max(f[v][0],f[v][1]);
		f[x][1]+=f[v][0];
	}
}
int main(){
	freopen("profitz.in","r",stdin);
	freopen("profitz.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;++i) scanf("%d",&w[i]);
	for(int i=1;i<n;++i){
		scanf("%d%d",&u,&v);
		push(u,v);
	}
	dfs(1,0);
	printf("%d\n",max(f[1][0],f[1][1]));
	return 0;
}