0AC求调
查看原帖
0AC求调
1084560
TBH2689484372楼主2024/3/8 22:39
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<cmath>
using namespace std;
int T,N,K;
vector<vector<int> > map;
int ans;
int dfs(int num)
{
	for(long long unsigned i=1;i<map[num].size();i++)
	{
		if(dfs(map[num][i])==K) continue;
		map[num][0]+=map[map[num][i]][0];
	}
	map[num][0]++;
	if(map[num][0]==K) ans++;
	return map[num][0];
}
int main()
{
	cin>>T;
	while(T--)
	{
		cin>>N>>K;
		ans=0;
		vector<bool>mark(N+1,true);
		map.clear();
		map.resize(N+1,vector<int>(1)={0});
		for(int i=1;i<N;i++)
		{
			int parent,son;
			cin>>parent>>son;
			mark[son]=false;
			map[parent].push_back(son);
		}
		for(int i=1;i<=N;i++)
		{
			if(mark[i]) 
			{
				dfs(i);
				break;
			}
		}                   
		if(ans==1.0*N/K) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
}
2024/3/8 22:39
加载中...