看了题解后才写的 20pts求助
#include <bits/stdc++.h>
using namespace std;
vector <pair <int,int> > g[410];
int dp[410][410][10];
int N,M,K;
void dfs(int x,int pre) {
dp[x][0][0]=dp[x][1][1]=0;
for(int i=0;i<g[x].size();i++) {
int nx=g[x][i].first; int cost=g[x][i].second;
if(nx==pre) continue;
dfs(nx,x);
for(int node=K;node>=0;node--) {
for(int bit=0;bit<2;bit++) {
dp[x][node][bit]+=dp[x][0][0]+cost*(bit==0&&K==2);
for(int pnode=0;pnode<=node;pnode++) {
dp[x][node][bit]=min(dp[x][node-pnode][bit]+min(dp[nx][pnode][bit^1],dp[nx][pnode][bit]+(M==2||bit==1)*cost),dp[x][node][bit]);
}
}
}
}
}
int main() {
// freopen("Isolation.in",r,stdin);
// freopen("Isolation.out",w,stdout);
memset(dp,63,sizeof dp);
cin>>N>>M>>K;
if(M-1>N-K) {
puts("-1"); return 0;
}
for(int i=0;i<N-1;i++) {
int x,y,z; cin>>x>>y>>z;
x--; y--;
g[x].push_back({y,z});
g[y].push_back({x,z});
}
dfs(0,-1);
cout<<dp[0][K][0]<<endl;
return 0;
}