rt,
下面这份代码以及这份题解是不对的,但是在现有数据下可以通过,所以请求加强数据。
#include<bits/stdc++.h>
using namespace std;
int dp[1000100][2],n,ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>dp[i][1];
}
ans=dp[1][1];
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
dp[v][1]+=dp[u][0];
dp[v][0]+=max(dp[u][1],dp[u][0]);
ans=max(ans,max(dp[v][1],dp[v][0]));
}
cout<<ans;
return 0;
}
要卡掉的话,原来数据边都是按顺序输入的,将其 randomshuffle(); 一下就不对了。