比赛 2009noip模拟试卷 评测结果 AAAAAAAAAA
题目名称 火车站饭店 最终得分 100
用户昵称 GROWL GOOD BOYส็ 运行时间 0.264 s
代码语言 C++ 内存使用 3.08 MiB
提交时间 2016-10-09 14:10:15
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100010;
int len=0;
struct node
{
	int to,next;
}e[maxn<<1];
int head[maxn];
void Insert(int x,int y)
{
	len++;
	e[len].to=y;
	e[len].next=head[x];
	head[x]=len;
}
int f[maxn][2];
//0代表选 1代表不选 
int N;
bool vis[maxn];
void DP(int x)
{
	vis[x]=1;
	for(int i=head[x];i;i=e[i].next)
	{
		int t=e[i].to;
		if(!vis[t])
		{
			DP(t);
			f[x][0]+=f[t][1];
			f[x][1]+=max(f[t][1],f[t][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",&f[i][0]);
	for(int x,y, i=1;i<N;i++)
	{
		scanf("%d%d",&x,&y);
		Insert(x,y);
		Insert(y,x);
	}
	DP(1); 
	printf("%d",max(f[1][0],f[1][1]));
	return 0;
}