比赛 |
20151026 |
评测结果 |
AAAAAAAAAA |
题目名称 |
火车站饭店 |
最终得分 |
100 |
用户昵称 |
mikumikumi |
运行时间 |
0.936 s |
代码语言 |
C++ |
内存使用 |
19.13 MiB |
提交时间 |
2015-10-26 19:33:59 |
显示代码纯文本
#include<cstdio>
#include<deque>
using namespace std;
const int SIZEN=100010;
int N;
int f[SIZEN][2]={0},cost[SIZEN];
bool visit[SIZEN]={0};
deque<int> s[SIZEN];
void read()
{
scanf("%d",&N);
for(int i=1;i<=N;i++)
scanf("%d",&cost[i]);
for(int i=1;i<N;i++)
{
int fr,to;
scanf("%d%d",&fr,&to);
s[fr].push_back(to);
s[to].push_back(fr);
}
}
void DP(int x)
{
visit[x]=1;
for(int i=0;i<s[x].size();i++)
{
int v=s[x][i];
if(!visit[v])
{
DP(v);
f[x][0]+=max(f[v][0],f[v][1]);
f[x][1]+=f[v][0];
}
}
f[x][1]+=cost[x];
}
void work()
{
DP(1);
int ans=max(f[1][0],f[1][1]);
printf("%d",ans);
}
int main()
{
freopen("profitz.in","r",stdin);
freopen("profitz.out","w",stdout);
read();
work();
return 0;
}