제출 #881564

#제출 시각아이디문제언어결과실행 시간메모리
881564djs100201수천개의 섬 (IOI22_islands)C++17
19.25 / 100
76 ms30496 KiB
#include "islands.h" #include <variant> #include<bits/stdc++.h> #define all(v) v.begin(),v.end() using namespace std; using ll = long long; using P = pair<ll, ll>; using PP = pair<ll, P>; const ll n_ = 2e5 + 505, inf = (ll)2e9 * (ll)1e9 + 7, mod = 998244353; ll n, m, tc = 1, a, b, c, d, sum, x, y, z, base, ans, k; vector<ll>rev[n_]; ll prob[n_],out[n_]; set<ll>v[n_]; variant<bool, std::vector<int>> find_journey(int N, int M, std::vector<int> U, std::vector<int> V) { n=N,m=M; for(int i=0;i<m;i++){ out[U[i]]++; v[U[i]].insert(V[i]); rev[V[i]].push_back(U[i]); } fill(prob,prob+n+1,1); //가능성이 존재한다. queue<ll>q; for(int i=1;i<=n;i++){ if(out[i])continue; q.push(i); } while(q.size()){ a=q.front(); q.pop(); prob[a]=0; for(auto nxt:rev[a]){ out[nxt]--; v[nxt].erase(a); if(out[nxt]==0){ q.push(nxt); } } } ll now=0; vector<int>ret,ret_rev; while(1){ if(!out[now])return false; if(out[now]==1){ ret.push_back(now); ret_rev.push_back(now); queue<ll>q; for(auto nxt:rev[now]){ out[nxt]--; v[nxt].erase(now); if(out[nxt]==0)q.push(nxt); } out[now]=0; now=*v[now].begin(); } else{ return true; break; } } reverse(all(ret_rev)); for(auto i:ret_rev)ret.push_back(i); return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...