记录编号 |
562402 |
评测结果 |
AAAAAAAAAA |
题目名称 |
岛国 |
最终得分 |
100 |
用户昵称 |
夜莺 |
是否通过 |
通过 |
代码语言 |
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;
}