80WA4、5,求调
查看原帖
80WA4、5,求调
1284088
meifan666楼主2025/6/24 21:52
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,u,v,w,dp[2010][2010],siz[2010];
struct edge{int from,to,val;};
vector<edge>p[2010];
void dfdp(int x,int fa){
	siz[x]=1;
	for(int i=0;i<p[x].size();++i){
		int y=p[x][i].to;
		if(y==fa)continue;
		dfdp(y,x),siz[x]+=siz[y];
		for(int j=min(siz[x],k);j>=0;--j){
			int t=siz[y]*(n-k-siz[y]);
			dp[x][j]=max(dp[x][j],dp[y][0]+dp[x][j]+t*p[x][i].val);//l==0使反复更新,但l可取0
			for(int l=min(siz[y],j);l>0;--l){
				t=l*(k-l)+(siz[y]-l)*(n-k-siz[y]+l);//经过这条边的收益
				dp[x][j]=max(dp[x][j],dp[y][l]+dp[x][j-l]+t*p[x][i].val);
			}
		}
	}
}
signed main(){
	cin>>n>>k;
	for(int i=1;i<n;i++){
		cin>>u>>v>>w;
		p[u].push_back({u,v,w});
		p[v].push_back({v,u,w});
	}
	dfdp(1,0);
	cout<<dp[1][k];
	return 0;
}
2025/6/24 21:52
加载中...