记录编号 562402 评测结果 AAAAAAAAAA
题目名称 岛国 最终得分 100
用户昵称 Gravatar夜莺 是否通过 通过
代码语言 C++ 运行时间 0.296 s
提交时间 2021-07-05 08:31:46 内存使用 1.46 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
const int MAXN=5005;
struct note{
    int x1,x2,y1,y2;
}dao[MAXN];
int father[MAXN];
int yes[MAXN];
int n,ans;
inline bool can_(int i,int j){
    if(dao[i].x1>dao[j].x2+1||dao[j].x1>dao[i].x2+1||dao[i].y1>dao[j].y2+1||dao[j].y1>dao[i].y2+1)return 0;
    if(dao[i].x1==dao[j].x2+1){
		if(dao[i].y1==dao[j].y2+1)return 0;
		if(dao[j].y1==dao[i].y2+1)return 0;
	}
	if(dao[j].x1==dao[i].x2+1){
		if(dao[i].y1==dao[j].y2+1)return 0;
		if(dao[j].y1==dao[i].y2+1)return 0;
	}
	return 1;
}
inline int Find(int x){
    if(father[x]!=x)father[x]=Find(father[x]);
    return father[x];
}
inline bool Union(int i,int j){
    int fi=Find(i);
    int fj=Find(j);
    if(fi==fj)return 0;
    else{
        father[fj]=fi;
        return 1;
    }
}
int main(){
   	freopen("jx.in","r",stdin);
	freopen("jx.out","w",stdout);
    scanf("%d",&n);
    ans=n;
    for(int i=1;i<=n;i++){
        scanf("%d%d%d%d",&dao[i].x1,&dao[i].y1,&dao[i].x2,&dao[i].y2);
        father[i]=i;
    }
    for(int i=1;i<n;i++){
        for(int j=i+1;j<=n;j++){
            if(can_(i,j)&&Union(i,j))ans--;
        }
    }
    printf("%d",ans);
    return 0;
}