显示代码纯文本
#include<bits/stdc++.h>
#define bianli for(int i=head[x];i;i=a[i].next)
using namespace std;
const int maxn=1005;
int f[maxn][maxn],size[maxn],tot,head[maxn];
struct road{int v,to,next;}a[maxn*2];
void add(int x,int y,int z){
a[++tot].v=z;a[tot].to=y;
a[tot].next=head[x];head[x]=tot;}
void dfs(int x,int fa){
size[x]=1;
bianli{
int to=a[i].to;
if(to==fa)continue;
dfs(to,x);
size[x]+=size[to];
for(int j=size[x];j;j--)
for(int k=min(j-1,size[to]);k>=0;k--)
f[x][j]=max(f[x][j],f[x][j-k-1]+a[i].v+f[to][k]);
}}
int main(){
freopen("ecappletree.in","r",stdin);
freopen("ecappletree.out","w",stdout);
int n,k,q,w,e;
cin>>n>>k;
for(int i=1;i<n;i++){cin>>q>>w>>e;
add(q,w,e);add(w,q,e);}
dfs(1,0);
cout<<f[1][k];
return 0;
}