#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2010;
ll n,k,hed[N],cnt,f[N],sz[N],dis[N],dp[N][N];
struct Edge{
ll to,nxt,w;
}e[N<<1];
void add_edge(ll u,ll v,ll w){
e[++cnt].to=v;
e[cnt].nxt=hed[u];
hed[u]=cnt;
e[cnt].w=w;
}
void dfs_build(ll x,ll fa){
f[x]=fa;
sz[x]=1;
for(ll i=hed[x];i;i=e[i].nxt){
ll y=e[i].to;
if(y==fa)continue;
dis[y]=dis[x]+e[i].w;
dfs_build(y,x);
sz[x]+=sz[y];
}
}
void dfs(ll x){
dp[x][1]=0;
dp[x][0]=0;
for(ll i=hed[x];i;i=e[i].nxt){
ll y=e[i].to;
if(y==f[x])continue;
dfs(y);
for(ll j=min(sz[x],k);j>=0;j--){
if(dp[x][j]!=-1){
dp[x][j]+=dp[y][0]+sz[y]*(n-k-sz[y])*e[i].w;
}
for(ll kk=min(sz[y],j);kk>=max(
1ll//Inf年OI eps场空,忽略边界见祖宗
,j-(sz[x]-sz[y]));--kk){
if(dp[x][j-kk]==-1)continue;
dp[x][j]=max(dp[x][j],dp[x][j-kk]+dp[y][kk]+(kk*(k-kk)+(sz[y]-kk)*(n-k-sz[y]+kk))*e[i].w);
}
}
}
}
main(){
memset(dp,-1,sizeof dp);
scanf("%lld%lld",&n,&k);
k=min(k,n-k);
for(ll i=1;i<n;i++){
ll u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add_edge(u,v,w);
add_edge(v,u,w);
}
dfs_build(1,0);
dfs(1);
cout<<dp[1][k]<<endl;
}
为什么38行不能改成 0ll ,而必须在前面初始化???