```cpp
#include<bits/stdc++.h>
using namespace std;
const int N = 109;
struct egde{
int to,nex,cost;
} e[N << 1];
int ecnt,head[N],siz[N];
int n,q;
int dp[N][N];
void addegde(int u,int v,int w){
ecnt++;
e[ecnt] = (egde){v,head[u],w};
head[u] = ecnt;
}
void dfs(int u,int fa){
for(int i = head[u];i;i = e[i].nex){
int v = e[i].to;
if(v == fa)
continue;
dfs(v,u);
siz[u] += siz[v] + 1;//这里不是直接赋值,要加起来,因为不止一个儿子
for(int j = min(siz[u],q);j;j--)
for(int k = min(siz[v],j - 1);k>=0;k--)//k可以取到0
dp[u][j] = max(dp[u][j],dp[u][j - k - 1] + dp[v][k] + e[i].cost);
}
}
int main(){
scanf("%d%d", &n, &q);
for(int i = 1;i < n;i++){
int u,v,w;
scanf("%d%d%d", &u, &v, &w);
addegde(u,v,w);
addegde(v,u,w);
}
dfs(1,0);
printf("%d",dp[1][q]);
return 0;
}
```
by iqwl @ 2023-08-16 21:06:42