比赛 |
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;
}