记录编号 |
382913 |
评测结果 |
AAAAAAAAAA |
题目名称 |
岛国 |
最终得分 |
100 |
用户昵称 |
kZime |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.215 s |
提交时间 |
2017-03-14 20:34:45 |
内存使用 |
0.42 MiB |
显示代码纯文本
/*kZime*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#define MAXN
using namespace std;
int n, u[5333], ans;
inline int read() {
int k = 0, f = 1; char c = getchar();
for(; !isdigit(c); c = getchar())if(c == '-') f = -1;
for(; isdigit(c); c = getchar()) k = k * 10 + c - '0';
return k * f;
}
struct land{
int x1, y1, x2, y2;
void in() {
x1 = read();
y1 = read();
x2 = read();
y2 = read();
}
}l[5333];
int getf(int x) {
if(u[x] != x) u[x] = getf(u[x]);
return u[x];
}
bool Union(int a, int b) {
int fa = getf(a), fb = getf(b);
if(fa == fb) {
return false;
}
u[fb] = fa;
return true;
}
bool p_(land a, land b) {
if(a.x2 < b.x1 - 1 || a.y2 < b.y1 - 1 || a.y1 - 1 > b.y2) return false;
if(a.x2 == b.x1 - 1) {
if(a.y2 < b.y1) return false;
if(a.y1 > b.y2) return false;
}
return true;
}
bool cmp(const land &a, const land &b) {
return a.x1 < b.x1;
}
int main() {
#ifndef LOCAL
freopen("jx.in", "r", stdin);
freopen("jx.out", "w", stdout);
#else
freopen("in.txt", "r", stdin);
#endif
n = read();
ans = n;
for(int i = 1; i <= n; i++) {
u[i] = i;
l[i].in();
}
sort(l + 1, l + n + 1, cmp);
// for(int i = 1; i <= n; i++) {
// printf("%d %d %d %d\n",l[i].x1, l[i].x2, l[i].y1, l[i].y2);
// }
for(int i = 1; i <= n; i++) {
for(int j = i + 1; j <= n; j++) {
if(p_(l[i], l[j]) && Union(i, j)) {
ans--;
if(ans == 1){
printf("1");
return 0;
}
}
}
}
printf("%d",ans);
return 0;
}