啊!一直79啊!求助
查看原帖
啊!一直79啊!求助
520544
Phrvth楼主2022/7/22 20:48

我不知道我为啥错了,第二个点太长了(我不想看

Code:Code:

#include<bits/stdc++.h>

using namespace std;
int dp[1500][1500];//dp[i][j]表示以节点i为根的子树保留树根j时的最大苹果数
int n,q,dis[1500][1500];
void fatherdie(int now){
	for(int i=1;i<=n;i++){
		if(dis[now][i])
			dis[i][now]=0,fatherdie(i);
	}
}
void dfs(int now){
	int left=0,right=0;
	for(int i=1;i<=n;i++){
		if(dis[now][i]){
			if(left) right=i;
			else left=i;
			dfs(i);
		}
	}
	for(int i=1;i<=q;i++){
		for(int j=0;j<=i;j++){
			//j,i-j
			int ans=0;
			if(j-1>=0) ans+=dp[left][j-1]+dis[now][left];
			if(i-j-1>=0) ans+=dp[right][i-j-1]+dis[now][right];
			dp[now][i]=max(dp[now][i],ans);
		}
	}
} 
int main()
{
	cin>>n>>q;
	for(int i=1;i<n;i++){
		int u,v,r;
		cin>>u>>v>>r;
		dis[u][v]=max(dis[u][v],r);
		dis[v][u]=max(dis[v][u],r);
	}
	fatherdie(1);
	dfs(1);
	cout<<dp[1][q];
	return 0;
}

求助!

2022/7/22 20:48
加载中...