在NOI−liunx2.0上写的,一直段错误(核心已转储)求调.
code:
#include<bits/stdc++.h>
#define N 6005
#define int long long
using namespace std;
int n,x,y,root,happy[N],fa[N],dp[N][2];
vector<vector<int> > g;
inline void read(int &num){
int x=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0'){
f=(ch=='-')?-1:1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
num=x*f;
}
inline void dfs(int u){
dp[u][0]=0;
dp[u][1]=happy[u];
for(auto i:g[u]){
int v=g[u][i];
dfs(v);
dp[u][0]+=max(dp[v][0],dp[v][1]);
dp[u][1]+=dp[v][0];
}
}
signed main(){
read(n);
for(int i=1;i<=n;++i){
read(happy[i]);
fa[i]=i;
}
for(int i=1;i<=n;++i){
read(x);
read(y);
fa[x]=y;
g[y].push_back(x);
}
for(int i=1;i<=n;++i){
if(fa[i]==i){
root=i;
break;
}
}
dfs(root);
printf("%lld",max(dp[root][0],dp[root][1]));
}