判断联通快个数 答案为个数减一
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<string.h>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
int ans[120];
#define sp system("pause")
#define mt(dp) memset(dp,0,sizeof dp)
int from[120];
int posx[120];
int posy[120];
int n;
void dfs(int x,int cot)
{
from[x]=cot;
for(int i=0;i<n;i++)
{
if(!from[i]&&(posx[x]==posx[i]||posy[x]==posy[i]))
dfs(i,cot);
}
}
int main()
{
cin>>n;
memset(from,0,sizeof from);
for(int i=0;i<n;i++)
{
cin>>posx[i]>>posy[i];
}
int cot=0;
for(int i=0;i<n;i++)
{
if(!from[i])
{
cot++;
dfs(i,cot);
}
}
cout<<cot-1<<endl;
return 0;
}