#include<bits/stdc++.h>
#define ll long long
#define maxn 100010
using namespace std;
int T, n, k, siz[maxn], cas, ru[maxn];
ll ans, f[maxn][110];
struct edge {
int v, t;
edge() {}
edge(int v, int t) : v(v), t(t) {}
};
vector<edge> G[maxn];
void Dfs(int now, int from) {
if (ru[now] == 1) {
siz[now] = 1;
f[now][0] = f[now][1] = 0;
}
for (int i = 0; i < G[now].size(); i++) {
int v = G[now][i].v;
int t = G[now][i].t;
if (v == from)continue;
Dfs(v, now);
int S = min(k, siz[now]);
for (int j = S; j >= 0; j--) {
int T = min(k - j, siz[v]);
for (int r = 1; r <= T; r++) {
f[now][j + r] = min(f[now][j + r], f[now][j] + f[v][r] + 1ll * r * (k - r) * t);
}
}
siz[now] += siz[v];
/*
另一种稍慢的写法
int S = min(k, siz[now] + siz[v]);
for (int j = S; j >= 0; j--) {
int T = min(j, siz[v]);
for (int r = max(j - siz[now], 0); r <= T; r++) {
f[now][j] = min(f[now][j], f[now][j - r] + f[v][r] + 1ll * r * (k - r) * t);
}
}
siz[now] += siz[v];
*/
}
ans = min(ans, f[now][k]);
}
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d%d", &n, &k);
ans = 1e18;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= k; j++)
f[i][j] = 1e18;
for (int i = 1; i <= n; i++) {
G[i].clear();
siz[i] = 0;
ru[i] = 0;
}
int u, v, t;
for (int i = 1; i < n; i++) {
scanf("%d%d%d",&u,&v,&t);
G[u].push_back(edge(v, t));
G[v].push_back(edge(u, t));
ru[u]++;
ru[v]++;
}
int rot = 1;
for (int i = 1; i <= n; i++) {
if (ru[i] > 1)rot = i;
}
Dfs(rot, 0);
printf("Case #%d: %lld\n", ++cas, ans);
}
return 0;
}