#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int T,n,k,u,v,cnt,t[N];
vector<int> g[N];
inline void dfs(int x,int last) {
t[x]=1;
for(auto u:g[x])
if(u!=last) dfs(u,x),t[x]+=t[u];
if(t[x]==k) cnt++,t[x]=0;
}
int main() {
ios_base::sync_with_stdio(NULL);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>T;
while(T--) {
cin>>n>>k;
for(int i=1;i<=n-1;i++)
cin>>u>>v,g[u].push_back(v),g[v].push_back(u);
if(n%k) {
cout<<"NO\n";
continue;
}
dfs(1,-1);
if(cnt==n/k) cout<<"YES\n";
else cout<<"NO\n";
cnt=0;
for(int i=1;i<=n;i++)
t[i]=0,g[i].clear();
}
return 0;
}
就对了一个点,其余的都MLE了。