#include<bits/stdc++.h>
using namespace std;
vector <int> a[200000];
int d[200000];
int k;
int dfs(int u,int par)
{
int sum=0;
int res[2000];
int cou=0;
for(int i=0;i<a[u].size();i++)
{
if(a[u][i]==par)continue;
int p=dfs(a[u][i],u);
res[cou++]=p;
}
if(cou<k)return 1;
sort(res,res+cou);
for(int i=0;i<k;i++)
{
sum+=res[cou-1-i];
}
return sum+1;
}
int main()
{
int t;
cin>>t;
int cc=1;
while(t--)
{
int n;
scanf("%d%d",&n,&k);
for(int i=0;i<=2e4;i++)
a[i].clear();
for(int i=0;i<n-1;i++)
{
int u,v;
scanf("%d%d",&u,&v);
a[u].push_back(v);
a[v].push_back(u);
}
cout<<"Case "<<cc++<<": ";
cout<<dfs(1,-1)<<endl;
}
return 0;
}
//////
用dfs记录它子节点最大的权重,然后一直递推回来,每次取最大的k个节点,然后注意的地方就是dfs之后的cou值会变,所以因放在后面,和每次建立一个数组保证正确性