#include<bits/stdc++.h>
using namespace std;
int n,k,t;
struct node{
int v,next;
}ed[200010];
int head[100010],cnt=0;
int st[100010];
int ans=0;
inline void add(int u,int v){
ed[++cnt].v=v;ed[cnt].next=head[u];head[u]=cnt;
}
inline void dfs(int x,int s){
st[x]=1;
for(int i=head[x];i;i=ed[i].next){
int v=ed[i].v;
if(v!=s){
dfs(v,x);
st[x]+=st[v];
}
}
if(st[x]==k) {
// printf("%d",x);
ans++;st[x]-=k;
}
}
int main(){
scanf("%d",&t);
while(t--){
memset(head,-1,sizeof(head));
memset(st,0,sizeof(st));
// memset(vis,0,sizeof(vis));
cnt=0;ans=0;
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
add(a,b);add(b,a);
}
if(n%k>0) {
printf("NO\n"); continue;
}
dfs(1,0);
printf("%d",ans);
if(ans==n/k) printf("YES\n");
else printf("NO\n");
}
return 0;
}
/*
1
9 3
1 2
2 4
2 5
1 3
3 6
3 7
1 8
1 9
*/
上面那组数据是我自己造的,不知道为什么错了