제출 #652865

#제출 시각아이디문제언어결과실행 시간메모리
652865LoboThousands Islands (IOI22_islands)C++17
9.10 / 100
907 ms2097152 KiB
#include "islands.h" #include<bits/stdc++.h> using namespace std; #define pb push_back #define fr first #define sc second #define mp make_pair const int maxn = 2e5+10; int n, m, tin[maxn], low[maxn], mark[maxn], iscyc[maxn], can0[maxn], timer; vector<int> g[maxn], gt[maxn]; vector<pair<int,int>> gid[maxn]; map<int,vector<int>> boats[maxn]; vector<int> cur, final; int cycbeg = -1; void dfs(int u, int ant) { if(final.size()) return; if(g[u].size() >= 3 || (g[u].size() == 2 && u == 0)) { final = cur; vector<int> i1s; for(auto x : gid[u]) { if(i1s.size() != 2 && x.sc/2 != ant/2) i1s.pb(x.sc); } final.pb(i1s[0]); final.pb(i1s[1]); int aux = final.size(); for(int i = aux-3; i >= 0; i--) { final.pb(final[i]); } } if(final.size()) return; for(auto V : gid[u]) if(V.sc/2 != ant/2) { if(final.size()) return; cur.pb(V.sc); dfs(V.fr,V.sc); cur.pop_back(); } } void dfs0(int u) { can0[u] = 1; for(auto v : g[u]) { if(can0[v] == 0) dfs0(v); } } variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) { n = N; m = M; for(int i = 0; i < m; i++) { g[U[i]].pb(V[i]); gid[U[i]].pb(mp(V[i],i)); gt[V[i]].pb(U[i]); boats[U[i]][V[i]].pb(i); } dfs(0,-10); dfs0(0); if(final.size()) { return final; } return false; }
#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...