我们定义dp[i][j]为以i为根的子树上存留j条边的最多苹果树
状态转移方程是:dp[u][j]=max(dp[u][j],dp[u][j-k-1]+dp[v][k]+e[i].w);
const int MAX=1010;
int dp[MAX][MAX];
struct E{
int to,next,w;
}e[MAX];
int head[MAX];
int cnt;
int s[MAX];
void add(int x,int y,int w){
e[cnt].to=y;
e[cnt].w=w;
e[cnt].next=head[x];
head[x]=cnt++;
}
int n,m;
void dfs(int u,int fa){
for(int i=head[u];~i;i=e[i].next){
int v=e[i].to;
if(v==fa) continue;
dfs(v,u);
s[u]+=s[v]+1;
for(int j=min(m,s[u]);j>=0;j--){
for(int k=min(s[v],j-1);k>=0;k--){
dp[u][j]=max(dp[u][j],dp[u][j-k-1]+dp[v][k]+e[i].w);
}
}
}
}
int main(){
cin>>n>>m;
mms(head,-1);
for(int i=0;i<n-1;i++){
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
dfs(1,-1);
cout<<dp[1][m]<<endl;
}