#include <bits/stdc++.h>
using namespace std;
int n,Q,a,b,c;
struct node {
int left,right;//左子编号、右子编号
int lbr,rbr;//左边边,右边边
}nodes[105];
int book[105],vis[105][105];
int e[105][105];
int f[105][105];
int maxsize[105];
void Bfun(int step){
int x=1;
for(int i=1;i<=n;i++) if(book[i]==0){
book[i]=1;
if(x) nodes[step].left=i,nodes[step].lbr=e[step][i],x--;
else nodes[step].right=i,nodes[step].rbr=e[step][i];
Bfun(i);
}
}
int dfs(int step){
if(nodes[step].left==0 && nodes[step].right==0){
maxsize[step]=1;
return 1;
}
maxsize[step]=dfs(nodes[step].left)+dfs(nodes[step].right)+1;
return maxsize[step];
}
int dp(int i,int j){
if(vis[i][j]) return f[i][j];
if(j==0) { vis[i][j]=1; f[i][j]=0; return 0; }
if(nodes[i].left==0 && nodes[i].right==0) return 0;
if(maxsize[nodes[i].left]+maxsize[nodes[i].right]<j) return 0;
vis[i][j]=1;
if(maxsize[nodes[i].left]>maxsize[nodes[i].right]) swap(nodes[i].left,nodes[i].right),swap(nodes[i].lbr,nodes[i].rbr);
for(int k=maxsize[nodes[i].left]+1;k>=0 && j-k<=maxsize[nodes[i].right]+1 && j-k>=0;k--)
if(k>0 && j-k>0) f[i][j]=max(f[i][j],dp(nodes[i].left,k-1)+dp(nodes[i].right,j-k-1)+nodes[i].lbr+nodes[i].rbr);
else if(k==0) f[i][j]=max(f[i][j],dp(nodes[i].right,j-k-1)+nodes[i].rbr);
else f[i][j]=max(f[i][j],dp(nodes[i].left,k-1)+nodes[i].lbr);
return f[i][j];
}
int main()
{
cin>>n>>Q;
for(int i=1;i<=n-1;i++) cin>>a>>b>>c,e[a][b]=e[b][a]=c;
Bfun(1);
dfs(1);
for(int i=1;i<=n;i++) maxsize[i]--;
cout<<dp(1,Q)<<endl;
return 0;
}
谢谢帮助