求助!!!
查看原帖
求助!!!
631896
Wangtsjo楼主2023/11/2 20:48
#include<bits/stdc++.h>
using namespace std;
int n,k,t;
struct node{
	int v,next;
}ed[200010];
int head[100010],cnt=0;
int st[100010];
int ans=0;
inline void add(int u,int v){
	ed[++cnt].v=v;ed[cnt].next=head[u];head[u]=cnt;
}
inline void dfs(int x,int s){
	st[x]=1;
	for(int i=head[x];i;i=ed[i].next){
		int v=ed[i].v;
		if(v!=s){
			dfs(v,x);
			st[x]+=st[v];
		}	
	}
	if(st[x]==k) {
//		printf("%d",x);
		ans++;st[x]-=k;
	}
}
int main(){
	scanf("%d",&t);
	while(t--){
		memset(head,-1,sizeof(head));
		memset(st,0,sizeof(st));
//		memset(vis,0,sizeof(vis));
		cnt=0;ans=0;
		scanf("%d%d",&n,&k);
		for(int i=1;i<n;i++){
			int a,b;
			scanf("%d%d",&a,&b);
			add(a,b);add(b,a);
		}	
		if(n%k>0) {
			printf("NO\n"); continue;
		}
		dfs(1,0);
		printf("%d",ans);
		if(ans==n/k) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}
/*
1
9 3
1 2
2 4
2 5
1 3
3 6
3 7
1 8
1 9
*/ 

上面那组数据是我自己造的,不知道为什么错了

2023/11/2 20:48
加载中...