# #1#4#5#6#7TLE 求助
查看原帖
# #1#4#5#6#7TLE 求助
511042
Edwin_liannan楼主2021/9/24 15:54
#include<bits/stdc++.h>
using namespace std;
vector<int>s[6005];
int f[6005][2],h[6005],x,y,i,rt,n;bool v[6005];
void dp(int x){
	f[x][0]=0;f[x][1]=h[x];
	for(i=0;i<s[x].size();i++){
		int y=s[x][i];dp(y);
		f[x][0]+=max(f[y][0],f[y][1]),f[x][1]+=f[y][0];
	}
}
int main(){
	cin>>n;for(i=1;i<=n;i++) cin>>h[i];
	for(i=1;i<=n;i++){cin>>x>>y;s[y].push_back(x);v[x]=1;}
	for(i=1;i<=n;i++) if(!v[i]){rt=i;break;}
	dp(rt);
	cout<<max(f[rt][0],f[rt][1]);
}
2021/9/24 15:54
加载中...