比赛 快乐小组互测赛2019-09-27 评测结果 AAAAAAAAAAAAA
题目名称 二叉苹果树 最终得分 100
用户昵称 梦那边的美好ET 运行时间 0.014 s
代码语言 C++ 内存使用 13.71 MiB
提交时间 2019-09-29 22:25:29
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define maxn 110
using namespace std;
vector<int>b[maxn],c[maxn];
int n,m,f[maxn][maxn],a1,a2,a3,ans=0;
void dfs(int p,int fa){
	for(int i=0;i<b[p].size();i++){
		int x=b[p][i],y=c[p][i];
		if(x==fa)continue;
		dfs(x,p);
		for(int j=m;j>=1;j--)
			for(int t=0;t<=j-1;t++)
				f[p][j]=max(f[p][j],f[x][t]+f[p][j-t-1]+y);
	}
	return;
}
int main(){
	freopen("ecappletree.in","r",stdin);
	freopen("ecappletree.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<n;i++){
		scanf("%d%d%d",&a1,&a2,&a3);
		b[a1].push_back(a2);b[a2].push_back(a1);
		c[a1].push_back(a3);c[a2].push_back(a3);
	}
	dfs(1,0);
	for(int i=0;i<=m;i++)ans=max(ans,f[1][i]); 
	printf("%d",ans);
	return 0;
}