树上贪心10分求调
查看原帖
树上贪心10分求调
778975
QAQ_YTH楼主2024/6/19 22:49

过了#5,其它点MLE

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
struct data{
	int to,next;
}e[N];
int k,pre[N],m,n,T,u,v,sum;
void add(int u,int v){
	e[++k]={v,pre[u]};
	pre[u]=k;
}
int dfs(int x,int fa){
	int ans=1;
	for(int i=pre[x];i;i=e[i].next){
		int to=e[i].to;
		if(to==fa)continue;
		int xx=dfs(to,x);
		if(xx==-1)return -1;
		ans+=xx;
	}
	if(ans<m)return ans;
	if(ans==m){sum++;return 0;}
	return -1;
}
int main(){
	cin>>T;
	while(T--){
		cin>>n>>m;
		memset(pre,-1,sizeof(pre));
		sum=0,k=0;
		for(int i=1;i<n;i++){
			cin>>u>>v;
			add(u,v);
		}
		if(n%m!=0){
			puts("NO");
			continue;
		}
		//输入
		dfs(1,0);
		//初始化
		if(sum==(n/m))puts("YES");
		else puts("NO");
	}
	return 0;
}

2024/6/19 22:49
加载中...