比赛 |
2019级快乐小组模拟赛19.9.19 |
评测结果 |
AAAAAAAAAA |
题目名称 |
没有上司的舞会 |
最终得分 |
100 |
用户昵称 |
瑆の時間~無盡輪迴·林蔭 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
1.39 MiB |
提交时间 |
2019-09-18 21:19:47 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<vector>
#define R register
using namespace std;
int dp[6001][2];//0代表自己不参加,1代表自己参加
int a[6001];
bool root[6001];
vector<int>e[6001];
int n,a1,a2,rt;
void dfs(int x,int fa)
{
for(R int i=0;i<e[x].size();i++)
{
int s=e[x][i];
if(fa==e[x][i])
{
continue;
}
dfs(s,x);
dp[x][0]+=max(dp[s][0],dp[s][1]);
dp[x][1]+=dp[s][0];
}
dp[x][1]+=a[x];
}
int LINYIN()
{
freopen("partyy.in","r",stdin);
freopen("partyy.out","w",stdout);
scanf("%d",&n);
for(R int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(R int i=1;i<n;i++)
{
scanf("%d%d",&a1,&a2);
e[a1].push_back(a2);
e[a2].push_back(a1);
root[a1]=1;
}
for(R int i=1;i<=n;i++)
{
if(root[i]==0)
{
rt=i;
break;
}
}
dfs(rt,0);
printf("%d",max(dp[rt][0],dp[rt][1]));
return 0;
}
int sdd=LINYIN();
int main()
{
;
}