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