题目链接
题意
平面上有若干个点,从每个点出发,你可以往东南西北任意方向走,直到碰到另一个点,然后才可以改变方向。
请问至少需要加多少个点,使得点对之间互相可以到达。
思路
- 并查集,x或者y相等的点可以合并在一起
参考代码
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y;
};
node aa[1100];
int bb[1100];
int find1(int x)
{
if(bb[x]==x)
return x;
bb[x]=find1(bb[x]);
return bb[x];
}
void add(int i,int j)
{
int tmp1=find1(i);
int tmp2=find1(j);
bb[tmp2]=tmp1;
}
int main()
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>aa[i].x>>aa[i].y;
bb[i]=i;
}
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
{
if(aa[j].x==aa[i].x||aa[j].y==aa[i].y)
{
add(i,j);
}
}
}
int ans=0;
for(int i=1;i<=n;i++)
{
if(bb[i]==i)ans++;
}
cout<<ans-1<<endl;
}