50分求调喵~
查看原帖
50分求调喵~
1065103
Atri_Lobato楼主2024/5/17 21:27
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int n,k;
vector<int> edge[100005];
int big[100005];
int connect[100005];
int total=0;
bool ed[100005];
bool init()
{
	memset(connect,0,sizeof(connect));
	memset(edge,0,sizeof(edge));
	memset(ed,0,sizeof(ed));
	memset(big,0,sizeof(big));
	n=0,k=0;
	total=0;
	scanf("%d%d",&n,&k);
	for(int i=1;i<n;i++)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		edge[a].push_back(b);
		edge[b].push_back(a);
		connect[a]++;
		connect[b]++;
	}
	if(n%k!=0)
	{
		printf("NO\n");
		return 0;
	}
	return 1;
}
int dfs(int now)
{
	ed[now]=1;
	big[now]=1;
	bool flag=0;
	int i=0;
	for(;i<edge[now].size();i++)
	{
		if(ed[edge[now][i]]==0)
		{
			big[now]+=dfs(edge[now][i]);
		}
		if(big[now]==k&&flag==0)
		{
			big[now]=0;
			total+=k;
			flag=1;
			break;
		}
	}
	for(;i<edge[now].size();i++)
	{
		dfs(edge[now][i]);
	}
	return big[now];
}
int main()
{
	int T;
	cin>>T;
	for(int i=1;i<=T;i++)
	{
		if(init()==0)
		{
			continue;
		}
		int q=1;
		for(;connect[q]==1;q++);
		dfs(q);
		if(total==n)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
}
/*
2
4 2
2 3
1 2
3 4
4 2
1 2
1 3
1 4
*/
2024/5/17 21:27
加载中...