77求调
查看原帖
77求调
697189
00ll00楼主2024/4/23 16:35
#include<bits/stdc++.h>
using namespace std;
int n,q,a[114][514],ll[114][514],ls[2][114],rs[2][514],f[114][514],vis[114];
void dfs(int k){
	vis[k]=1;
	for(int i=1;i<=n;i++){
		if(ll[i][k]&&!vis[i]){
			if(ls[0][k])rs[0][k]=i,rs[1][k]=a[i][k];
			else ls[0][k]=i,ls[1][k]=a[i][k];
			dfs(i);
		}
	}
	
}
int dfs2(int k,int cnt){
	int cntl=0,cntr=0;
	if(ls[0][k]){
//		f[ls[0][k]][1]+=ls[1][k];
		dfs2(ls[0][k],0);
	}if(rs[0][k]){
		dfs2(rs[0][k],0);
	}
//	cout<<"ajlt"<<k<<' '<<cntl<<' '<<cntr<<'\n';
	for(int i=0;i<=q;i++){
			f[k][i+1]=max(f[ls[0][k]][i]+ls[1][k],f[k][i+1]);
//		cout<<k<<" L "<<i+1<<" "<<f[k][i+1]<<"\n";
	}
	for(int i=0;i<=q;i++){
			f[k][i+1]=max(f[rs[0][k]][i]+rs[1][k],f[k][i+1]);
//		cout<<k<<" R "<<i+1<<" "<<f[k][i+1]<<"\n";
	}
	for(int i=0;i<=q;i++){
		for(int j=0;j<=q;j++){
			f[k][i+j+2]=max(f[k][i+j+2],f[rs[0][k]][i]+rs[1][k]+f[ls[0][k]][i]+ls[1][k]);
//			cout<<k<<" LR "<<i+2<<" "<<f[k][i+j+2]<<"\n";
		}
	}
	
	return cnt;
}
int main(){
	cin>>n>>q;
	for(int i=1;i<n;i++){
		int x,y,z;
		cin>>x>>y>>z;
		a[x][y]=z;
		a[y][x]=z;
		ll[x][y]=1;
		ll[y][x]=1;
	}dfs(1);
	dfs2(1,0);
	cout<<f[1][q];
	return 0; 
}
2024/4/23 16:35
加载中...