9 个 MLE , 1 个 AC
#include<iostream>
#include<cstring>
using namespace std;
struct node
{
int to,next;
};
int t,n,k,cnt,sum,x,y;
node a[100003];
int head[100003],f[100003];
void make(int x,int y)
{
cnt++;
a[cnt].next=head[x];
a[cnt].to=y;
head[x]=cnt;
}
void dfs(int x,int fa)
{
for(int i=head[x];i;i=a[i].next)
{
if(a[i].to==fa) continue;
dfs(a[i].to,x);
f[x]+=f[a[i].to];
if(f[x]==k)
{
sum++;
f[x]=0;
return ;
}
}
return ;
}
int main()
{
cin>>t;
while(t--)
{
sum=cnt=0;
cin>>n>>k;
for(int i=1;i<n;i++)
{
cin>>x>>y;
make(x,y);
make(y,x);
f[i]=1;
}
f[n]=1;
if(n%k!=0)
{
printf("NO\n");
continue;
}
dfs(1,0);
if(sum!=n/k) printf("NO\n");
else printf("YES\n");
memset(head,0,sizeof(head));
}
}
蒸乌鱼