并查集
#include<iostream>
#include<string.h>
using namespace std;
void merge(int x,int y);
int find(int x);
#define MAX 1005
int m,n;
int road[MAX];
int a,b;
int ans;
int main()
{
while(cin>>n && n)
{
cin>>m;
memset(road,0,sizeof(road));
ans=n;
while(m--)
{
cin>>a>>b;
merge(a,b);
}
cout<<ans-1<<endl;
}
return 0;
}
void merge(int x,int y)
{
int f1=find(x);
int f2=find(y);
if(f1!=f2)
{
road[f2]=f1;
ans--;
}
}
int find(int x)
{
if(road[x]==0)return x;
road[x]=find(road[x]);
return road[x];
}
写的代码永远是伪c++