TLE求助
查看原帖
TLE求助
556362
qwq___qaq楼主2022/1/23 14:00
#include<bits/stdc++.h>
using namespace std;
const int maxn=6e3+5;
int n,a[maxn],fa[maxn],root,nxt[maxn],dp[maxn][2];
vector<int> Tree[maxn];
int dfs(int x,bool y){
	int a1=0,a2=0;
	for(int i=0,len=Tree[x].size();i<len;++i){
		a1+=dfs(Tree[x][i],1);
		if(y)
			a2+=dfs(Tree[x][i],0);
	}
	dp[x][y]=a1;
	if(y)
		dp[x][y]=max(dp[x][y],a2+a[x]);
	return dp[x][y];
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d",&a[i]);
	memset(fa,-1,sizeof(fa));
	for(int i=1,x,y;i<n;++i){
		scanf("%d%d",&x,&y);
		Tree[y].push_back(x);
		fa[x]=y;
	}
	for(int i=1;i<=n;++i)
		if(fa[i]==-1){
			root=i;
			break;
		}
	printf("%d\n",dfs(root,1));
    return 0;
}
2022/1/23 14:00
加载中...