# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
238072 | 2020-06-09T21:43:39 Z | m3r8 | Flood (IOI07_flood) | C++14 | 262 ms | 21608 KB |
#include <stdio.h> #include <set> #include <utility> #include <vector> #include <queue> #define N 100100 #define W N+100 #define ii std::pair<int,int> ii pp[N]; ii wl[W]; std::vector<ii> adj[N]; int zone[N<<2]; int path[N]; std::set<int> sadj[W]; std::vector<int> akt; std::vector<int> akt2; int used[N]; int tbl[4] = {2,1,0,3}; void cc(int v){ used[v] = 1; akt.push_back(v); for(auto i: adj[v]){ if(wl[i.second].first == v)akt2.push_back(i.second); if(!used[i.first]){ cc(i.first); }; }; }; int cnt = 1; void ccp(int ip){ zone[ip] = cnt; int p = ip >> 2; int on = ip % 4; int a,b; int tprev = (on+3)%4; int tnxt = (on+1)%4; int prev = tprev + (p << 2); int nxt = tnxt + (p << 2); for(auto i: adj[p]){ a = pp[i.first].first - pp[p].first == 0; if(a)b = pp[i.first].second - pp[p].second < 0; else b = pp[i.first].first - pp[p].first < 0; a = b * 2 + a; //printf("%d\n",a); if(tbl[on] == a){ nxt = tprev + (i.first << 2); }; if((tbl[on] + 1)%4 == a){ prev = tnxt + (i.first << 2); }; }; //printf("%d go from %d %d to %d %d and %d %d prev: %d nxt: %d cnt: %d\n",ip,pp[p].first,pp[p].second,pp[prev >> 2].first,pp[prev >> 2].second,pp[nxt >> 2].first,pp[nxt >> 2].second,prev,nxt,cnt); if(!zone[prev])ccp(prev); if(!zone[nxt])ccp(nxt); }; std::queue<ii> que; std::vector<int> erg; int main(void){ int n; scanf("%d",&n); for(int i = 0;i<n;i++){ scanf("%d %d",&(pp[i].first),&(pp[i].second)); }; int w; scanf("%d",&w); int a,b; for(int i = 0;i<w;i++){ scanf("%d %d",&a,&b); a--; b--; adj[a].push_back({b,i}); adj[b].push_back({a,i}); wl[i].first = a; wl[i].second = b; if(pp[a] > pp[b]){ wl[i].first = b; wl[i].second = a; }; }; int mnid; ii mn; int prcnt = 1; for(int i = 0;i<n;i++){ if(!used[i]){ akt.clear(); akt2.clear(); cc(i); if(akt.size() > 1){ mn = pp[akt[0]]; mnid = akt[0]; for(auto j: akt){ if(pp[j] < mn){ mn = pp[j]; mnid = j; }; for(int k = 0;k<4;k++){ if(!zone[k + (j << 2)]){ ccp(k + (j << 2)); cnt++; }; }; }; for(auto j: akt2){ if(pp[wl[j].second].second - pp[wl[j].first].second == 0){ sadj[zone[2 + (wl[j].first << 2)]].insert(zone[3 + (wl[j].first << 2)]); sadj[zone[3 + (wl[j].first << 2)]].insert(zone[2 + (wl[j].first << 2)]); if(zone[2 + (wl[j].first << 2)] != zone[1 + (wl[j].second << 2)])printf("error\n"); if(zone[3 + (wl[j].first << 2)] != zone[0 + (wl[j].second << 2)])printf("error\n"); }else{ sadj[zone[1 + (wl[j].first << 2)]].insert(zone[2 + (wl[j].first << 2)]); sadj[zone[2 + (wl[j].first << 2)]].insert(zone[1 + (wl[j].first << 2)]); if(zone[1 + (wl[j].first << 2)] != zone[0 + (wl[j].second << 2)])printf("error\n"); if(zone[2 + (wl[j].first << 2)] != zone[3 + (wl[j].second << 2)])printf("error\n"); }; }; que.push({zone[(mnid << 2)],1}); path[zone[(mnid << 2)]] = 1; while(que.size()){ ii akk = que.front();que.pop(); for(auto nxt: sadj[akk.first]){ if(!path[nxt]){ path[nxt] = akk.second + 1; que.push({nxt,akk.second + 1}); }; }; }; for(int j = prcnt;j<cnt;j++){ sadj[j].clear(); }; prcnt = cnt; }; }; }; for(int i = 0;i<w;i++){ if(pp[wl[i].second].second - pp[wl[i].first].second == 0){ if(path[zone[2 + (wl[i].first << 2)]] == path[zone[3 + (wl[i].first << 2)]]){ erg.push_back(i+1); }; }else{ if(path[zone[1 + (wl[i].first << 2)]] == path[zone[2 + (wl[i].first << 2)]]){ erg.push_back(i+1); }; }; }; printf("%d\n",erg.size()); for(auto i : erg){ printf("%d\n",i); }; return 0; };
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 8 ms | 7424 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 8 ms | 7424 KB | Output is correct |
2 | Correct | 9 ms | 7424 KB | Output is correct |
3 | Correct | 8 ms | 7424 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 8 ms | 7424 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 8 ms | 7424 KB | Output is correct |
2 | Correct | 9 ms | 7424 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 8 ms | 7424 KB | Output is correct |
2 | Correct | 8 ms | 7296 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 7424 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 7424 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 7424 KB | Output is correct |
2 | Correct | 9 ms | 7552 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 7424 KB | Output is correct |
2 | Correct | 9 ms | 7424 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 31 ms | 9056 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 83 ms | 18656 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 79 ms | 13560 KB | Output is correct |
2 | Incorrect | 228 ms | 20036 KB | Expected integer, but "error" found |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 221 ms | 19436 KB | Expected integer, but "error" found |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 262 ms | 21608 KB | Expected integer, but "error" found |
2 | Halted | 0 ms | 0 KB | - |