求助 10分
查看原帖
求助 10分
1059474
zzx0203楼主2024/5/25 16:44
#include<bits/stdc++.h>
using namespace std;
vector<int>a[6005];
int dp[6005][5];
int kl[6005];
int cs[6005];
int ans[6005];
int ma=0;
bool vis[6005];
void dfs(int tup,int n){
	for(int i=0;i<a[n].size();i++){
		if(a[n][i]!=tup){
			cs[a[n][i]]=cs[n]+1;
			if(kl[a[n][i]]>0){
				ans[cs[a[n][i]]]+=kl[a[n][i]];
			}
			dfs(n,a[n][i]);
		}
	}
	ma=max(ma,cs[n]);
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>kl[i];
	}
	int x,y;
	for(int i=1;i<=n-1;i++){
		cin>>x>>y;
		vis[x]=1;
		a[x].push_back(y);
		a[y].push_back(x);
	}
	for(int i=1;i<=n;i++){
		if(vis[i]==0){
			cs[i]=1;
			ans[1]=kl[i];
			dfs(-1,i);
		}
	}
	dp[0][1]=0;
	for(int i=1;i<=ma;i++){
		dp[i][1]=dp[i-1][0]+cs[i];
		dp[i][0]=max(dp[i-1][1],dp[i-1][0]);
	}
	cout<<max(dp[ma][1],dp[ma][0]);
	return 0;
}

就1#AC了,其他都WA了

2024/5/25 16:44
加载中...