10分。。。其他TLE,哪位大佬可以帮忙看一下,谢谢!
  • 板块P1536 村村通
  • 楼主Terraria
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/6/29 18:11
  • 上次更新2023/11/6 23:54:31
查看原帖
10分。。。其他TLE,哪位大佬可以帮忙看一下,谢谢!
289275
Terraria楼主2020/6/29 18:11
#include<bits/stdc++.h>
using namespace std;
int n,m,s[1000000],x,y;
void init_set(){//初始化 
	for(int i=1;i<=n+2;i++) s[i]=i;
}
int find_set(int x){//查找
	return x==s[x]?x:find_set(s[x]);
}
void union_set(int x,int y){//合并
	x=find_set(x);
	y=find_set(y);
	if(x!=y) s[x]=s[y];
}
int main(){
	do{
		cin>>n;
		init_set();
		if(n==0) break;
		cin>>m;
		if(m==0){
			cout<<n-1<<endl;
			continue;
		}
		int cmp=0;
		for(int i=1;i<=m;i++){
			cin>>x>>y;
			union_set(x,y);
		}
		for(int k=1;k<=n;k++){
			for(int j=k+1;j<=n;j++){
				if(find_set(k)!=find_set(j)){
					cmp++;
					union_set(k,j);
				}
			}
		}
		cout<<cmp<<endl;
	}while(n!=0);
}
2020/6/29 18:11
加载中...