Submission #101946
Source Code Expand
#include<cstdio> #include<vector> #include<algorithm> using namespace std; int N; int X[100000], Y[100000]; vector<int> Xs, Ys; vector<int> Ycor[200002]; vector<pair<int, int> > ranges[200002]; //slice with X vector<int> idxs[200002]; int uf[5000000]; int root(int p){ return (uf[p] < 0) ? p : (uf[p] = root(uf[p])); } void join(int p, int q) { p = root(p); q = root(q); if(p==q) return; uf[p] += uf[q]; uf[q] = p; } bool intersect(pair<int, int> x, pair<int, int> y) { return !(x.second <= y.first || y.second <= x.first); } void unify(int p, int q) { int ip=0, iq=0; pair<int, int> r1, r2; for(;ip<ranges[p].size()&&iq<ranges[q].size();){ r1 = ranges[p][ip]; r2 = ranges[q][iq]; if(intersect(r1, r2)){ join(idxs[p][ip], idxs[q][iq]); } if(r1.second < r2.second){ ++ip; }else{ ++iq; } } } int main() { scanf("%d", &N); for(int i=0;i<N;i++){ scanf("%d%d", X+i, Y+i); Xs.push_back(X[i]); Xs.push_back(X[i]+1); Ys.push_back(Y[i]); Ys.push_back(Y[i]+1); } Xs.push_back(-2100000000); Xs.push_back(2100000000); Ys.push_back(-2100000000); Ys.push_back(2100000000); sort(Xs.begin(), Xs.end()); sort(Ys.begin(), Ys.end()); Xs.erase(unique(Xs.begin(), Xs.end()), Xs.end()); Ys.erase(unique(Ys.begin(), Ys.end()), Ys.end()); for(int i=0;i<N;i++){ X[i] = lower_bound(Xs.begin(), Xs.end(), X[i]) - Xs.begin(); //Y[i] = lower_bound(Ys.begin(), Ys.end(), Y[i]) - Ys.begin(); Ycor[X[i]].push_back(Y[i]); } for(int i=0;i<Xs.size();i++){ sort(Ycor[i].begin(), Ycor[i].end()); int left = -2100000000; for(int j=0;j<Ycor[i].size();j++){ int val = Ycor[i][j]; if(left < val){ ranges[i].push_back(make_pair(left, val)); //[left, val) } left = val + 1; } ranges[i].push_back(make_pair(left, 2100000000)); } int bid = 0; for(int i=0;i<Xs.size();i++){ for(int j=0;j<ranges[i].size();j++) idxs[i].push_back(bid++); } for(int i=0;i<bid;i++) uf[i] = -1; //join!! for(int i=1;i<Xs.size();i++){ unify(i-1, i); } int ret = -1; for(int i=0;i<bid;i++) if(uf[i] < 0) ++ret; printf("%d\n", ret); return 0; }
Submission Info
Submission Time | |
---|---|
Task | I - Topology |
User | Operasan |
Language | C++ (GCC 4.4.7) |
Score | 100 |
Code Size | 2210 Byte |
Status | AC |
Exec Time | 272 ms |
Memory | 33936 KB |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:56: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result ./Main.cpp:58: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
Judge Result
Set Name | All | ||
---|---|---|---|
Score / Max Score | 100 / 100 | ||
Status |
|
Set Name | Test Cases |
---|---|
All | 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 4, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 5, 50, 6, 7, 8, 9 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
1 | AC | 48 ms | 14764 KB |
10 | AC | 45 ms | 14884 KB |
11 | AC | 45 ms | 14760 KB |
12 | AC | 45 ms | 14752 KB |
13 | AC | 45 ms | 14752 KB |
14 | AC | 203 ms | 23180 KB |
15 | AC | 223 ms | 24844 KB |
16 | AC | 272 ms | 33936 KB |
17 | AC | 221 ms | 24716 KB |
18 | AC | 129 ms | 19216 KB |
19 | AC | 126 ms | 19216 KB |
2 | AC | 46 ms | 14756 KB |
20 | AC | 134 ms | 19476 KB |
21 | AC | 131 ms | 19556 KB |
22 | AC | 135 ms | 19728 KB |
23 | AC | 137 ms | 19736 KB |
24 | AC | 145 ms | 19980 KB |
25 | AC | 140 ms | 19988 KB |
26 | AC | 141 ms | 20172 KB |
27 | AC | 143 ms | 20116 KB |
28 | AC | 154 ms | 20364 KB |
29 | AC | 151 ms | 20372 KB |
3 | AC | 44 ms | 14764 KB |
30 | AC | 115 ms | 17936 KB |
31 | AC | 114 ms | 17940 KB |
32 | AC | 113 ms | 18056 KB |
33 | AC | 50 ms | 15328 KB |
34 | AC | 54 ms | 15904 KB |
35 | AC | 69 ms | 16924 KB |
36 | AC | 92 ms | 18928 KB |
37 | AC | 69 ms | 16548 KB |
38 | AC | 47 ms | 14752 KB |
39 | AC | 57 ms | 15656 KB |
4 | AC | 46 ms | 14880 KB |
40 | AC | 77 ms | 17068 KB |
41 | AC | 51 ms | 15260 KB |
42 | AC | 55 ms | 15400 KB |
43 | AC | 57 ms | 15588 KB |
44 | AC | 50 ms | 15012 KB |
45 | AC | 69 ms | 16296 KB |
46 | AC | 50 ms | 15140 KB |
47 | AC | 76 ms | 16796 KB |
48 | AC | 77 ms | 16860 KB |
49 | AC | 49 ms | 15132 KB |
5 | AC | 47 ms | 14880 KB |
50 | AC | 48 ms | 15000 KB |
6 | AC | 45 ms | 14880 KB |
7 | AC | 43 ms | 14752 KB |
8 | AC | 43 ms | 14752 KB |
9 | AC | 43 ms | 14876 KB |