#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
#define ll long long
#define inf 1e18
ll n,K,t;
ll dp[2005][55];
struct mymp{
int v,len;
};
vector <mymp> st[2005];
void init(){
for(int i=0 ; i<2005 ;i++)
for(int j=0 ;j < 55 ; j++)
dp[i][j]=inf;
for(int i=0 ; i<2005 ; i++)
dp[i][0]=dp[i][1]=0;
}
void dfs(int now,int pre){
vector<mymp>::iterator iter;
for(iter=st[now].begin() ; iter<st[now].end() ;iter++){
if(iter->v==pre)continue;
int v = iter->v;
int lenth = iter->len;
dfs(v,now);
for(int j = K ; j>= 0; j--){
for(int l =1 ; l<= j ; l++){
dp[now][j] = min(dp[now][j], dp[now][j-l] + dp[v][l] + (K-l)*l*2*lenth);
}
}
}
}
int main(){
for(cin>>t ; t-- ;){
ll tmpa,tmpb,tmpc;
scanf("%I64d%I64d",&n,&K);
for(int i=1 ;i<=2004 ; i++)st[i].clear();
init();
for(int i=1 ; i<= n-1 ;i++){
scanf("%I64d%I64d%I64d",&tmpa,&tmpb,&tmpc);
mymp tt;tt.v=tmpb,tt.len=tmpc;
st[tmpa].push_back(tt);
tt.v=tmpa;
st[tmpb].push_back(tt);
}
dfs(1,-1);
printf("%I64d\n",dp[1][K]);
}
return 0;
}