参考:http://www.myexception.cn/program/1598926.html
#include <iostream>
#include <vector>
using namespace std;
#define MAX_N 100005
#define NUM 11
int f[MAX_N][NUM];
bool vis[MAX_N];
int cost[MAX_N];
int n,s,k;
struct Node{
int v,val;
};
vector<Node>node[MAX_N];
void dfs(int p){
for (int i=0;i<=k;i++)
{
f[p][i]=0;
}
vis[p]=1;
for (int i=0;i<node[p].size();i++)
{
int son=node[p][i].v;
if (vis[son])continue;
cost[son]=node[p][i].val;
dfs(son);
for (int i=k;i>=0;i--)
{
f[p][i]+=(f[son][0]+2*cost[son]);
for (int j=1;j<=i;j++)
{
f[p][i]=min(f[p][i],f[son][j]+cost[son]*j+f[p][i-j]);
}
}
}
}
int main()
{
int a,b,c;
Node son;
cin>>n>>s>>k;
for (int i=0;i<=n;i++)
{
node[i].clear();
vis[i]=false;
}
for (int i=1;i<n;i++)
{
cin>>a>>b>>c;
son.v=b;
son.val=c;
node[a].push_back(son);
son.v=a;
son.val=c;
node[b].push_back(son);
}
dfs(s);
cout<<f[s][k]<<endl;
return 0;
}