P1352 没有上司的舞会
不知道为啥输出不了
#include<cstdio>
#include<algorithm>
using namespace std;
int cnt,n,r[6000],vis[6000],f[6000][2],to[6000],nxt[6000],head[6000],t;
void add(int u,int v)
{
cnt++;
to[cnt]=v;
nxt[cnt]=head[u];
head[u]=cnt;
}
void dfs(int x)
{
for(int i=head[x];i;i=nxt[i])
{
int xx=nxt[i];
dfs(xx);
f[x][0]+=max(f[xx][0],f[xx][1]);
f[x][1]+=f[xx][0];
}
f[x][1]+=r[x];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&r[i]);
}
for(int i=1;i<=n-1;i++)
{
int a,b;
scanf("%d%d",&a,&b);
vis[a]=1;
if(a!=0&&b!=0)
add(b,a);
}
for(int i=1;i<=n;i++)
{
if(vis[i]==0)
{
t=i;
dfs(t);
break;
}
}
printf("%d",max(f[t][0],f[t][1]));
}