题目
https://www.luogu.org/problem/P2449
解题思路
并查集,易做。
需要注意判断矩形之间的相交的条件。
代码
#include<cstdio>
#include<algorithm>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
using namespace std;
struct node{
int x,y,xx,yy;
}a[7005];
int n,f[7005],ans;
int find(int x){
return (f[x]==x)?x:(f[x]=find(f[x]));
}
int main(){
scanf("%d",&n);
rep(i,1,n) scanf("%d%d%d%d",&a[i].x,&a[i].y,&a[i].xx,&a[i].yy),f[i]=i;
rep(i,1,n){
rep(j,1,i-1) {
int qx=find(i),qy=find(j);
if (qx!=qy){
bool b=1;
if ((a[i].xx<a[j].x||a[j].xx<a[i].x)||(a[i].yy<a[j].y||a[j].yy<a[i].y)) b=0;
if((a[i].x==a[j].xx||a[i].xx==a[j].x)&&(a[i].y==a[j].yy||a[i].yy==a[j].y)) b=0;
if (b) f[qx]=qy;
}
}
}
rep(i,1,n) ans+=(f[i]==i);
printf("%d",ans);
}