题目描述
blablabla
样例
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
//并查集
//一开始,自己的父级是自己(初始化),查找父级,以及合并,最后看看几个父级是自己-1
int cnt;
const int N = 1e3+10;
int f[N],n,m;
//其中,序号小的为头头
//查找
int find(int x){
if(f[x]==x)return x;
return find(f[x]);
}
void merge(int start,int end){
//先判断是不是同一个头头一个
int x=find(start),y=find(end);
if(x==y)return ;
if(x<y)f[y]=x;
else f[x]=y;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<=m;i++){
int start,end;
cin>>start>>end;
merge(start,end);
}
for(int i=1;i<=n;i++)
if(f[i]==i)cnt++;
cout<<cnt-1;
}