# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
121245 | 2019-06-26T09:06:16 Z | Plurm | Flood (IOI07_flood) | C++11 | 183 ms | 12520 KB |
#include <bits/stdc++.h> #define get(a,b) (ev[g[a][b]].first ^ ev[g[a][b]].second ^ a) using namespace std; int x[100005]; int y[100005]; int g[100005][4]; // U, L, D, R class Compare{ public: bool operator()(int x, int y){ return ::x[x] < ::x[y]; } }; int prior[4][4] = { {1, 0, 3, 2}, // U {2, 1, 0, 3}, // L {3, 2, 1, 0}, // D {0, 3, 2, 1} }; int inv[4] = {2, 3, 0, 1}; bool deleted[200005]; vector<pair<int,int> > ev; void deleteEdge(int idx){ int u = ev[idx].first; int v = ev[idx].second; for(int i = 0; i < 4; i++){ int j = inv[i]; if(get(u,i) == v && get(v,j) == u){ g[u][i] = -1; g[v][j] = -1; } } } int main(){ memset(g, -1, sizeof(g)); int n; scanf("%d",&n); multiset<int, Compare> ms; for(int i = 1; i <= n; i++){ scanf("%d%d",x+i,y+i); } for(int i = 1; i <= n; i++){ ms.insert(i); } int w; scanf("%d",&w); for(int i = 0; i < w; i++){ int a,b; scanf("%d%d",&a,&b); if(x[a] > x[b]) swap(a,b); if(y[a] > y[b]) swap(a,b); if(x[a] < x[b]){ g[a][3] = i; g[b][1] = i; }else{ g[a][0] = i; g[b][2] = i; } ev.push_back(make_pair(a,b)); } while(!ms.empty()){ int c = *ms.begin(); int state = 0; // 0: Going up // 1: Going left // 2: Going down // 3: Going right int u = c; vector<int> tour; vector<int> edge; map<int,int> ecnt; // U L D R do{ // Trace the border tour.push_back(u); for(int i = 0; i < 4; i++){ int chdir = prior[state][i]; if(g[u][chdir] != -1){ state = chdir; ecnt[g[u][chdir]]++; edge.push_back(g[u][chdir]); u = get(u,chdir); break; } } }while(u != c); for(int i = 0; i < edge.size(); i++){ int en = edge[i]; deleteEdge(en); if(ecnt[en] % 2 == 0) continue; deleted[en] = true; } for(int i = 0; i < tour.size(); i++){ int cnt = 0; for(int j = 0; j < 4; j++) if(g[tour[i]][j] != -1) cnt++; if(cnt == 0) ms.erase(tour[i]); } } vector<int> ans; for(int i = 0; i < w; i++){ if(!deleted[i]){ ans.push_back(i+1); } } printf("%d\n",ans.size()); for(int i = 0; i < ans.size(); i++){ printf("%d\n",ans[i]); } return 0; } /* 15 1 1 8 1 4 2 7 2 2 3 4 3 6 3 2 5 4 5 6 5 4 6 7 6 1 8 4 8 8 8 17 1 2 2 15 15 14 14 13 13 1 14 11 11 12 12 4 4 3 3 6 6 5 5 8 8 9 9 11 9 10 10 7 7 6 */
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 1920 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 1920 KB | Output is correct |
2 | Incorrect | 3 ms | 1920 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 1920 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 1920 KB | Output is correct |
2 | Incorrect | 3 ms | 1920 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 1920 KB | Output is correct |
2 | Incorrect | 3 ms | 1920 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 1920 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 1920 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 1920 KB | Output is correct |
2 | Incorrect | 4 ms | 1920 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 1920 KB | Output is correct |
2 | Incorrect | 4 ms | 1920 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 19 ms | 3584 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 72 ms | 7700 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 80 ms | 7920 KB | Output is correct |
2 | Incorrect | 183 ms | 12520 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 156 ms | 8552 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 152 ms | 9572 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |