Submission #797045

#TimeUsernameProblemLanguageResultExecution timeMemory
797045penguinman수천개의 섬 (IOI22_islands)C++17
1.75 / 100
1106 ms613756 KiB
#include "islands.h" #include <bits/stdc++.h> #include <variant> using std::cin; using std::cout; using std::endl; using std::vector; using std::string; using ll = int; using vi = vector<ll>; using vii = vector<vi>; using pii = std::pair<ll,ll>; #define rep(i,j,k) for(ll i=ll(j); i<ll(k); i++) #define REP(i,j,k) for(ll i=ll(j); i<=ll(k); i++) #define per(i,j,k) for(ll i=ll(j); i>=ll(k); i--) #define all(a) a.begin(),a.end() #define pb emplace_back #define ln "\n" std::variant<bool, std::vector<int>> find_journey(int N, int M, std::vector<int> U, std::vector<int> V) { vii edge(N), index(N); rep(i,0,M){ edge[U[i]].pb(V[i]); index[U[i]].pb(i); } if(edge[0].size() == 0) return false; vi ans; bool flag = false; { ll now = 0; while(true){ if((ans.empty() && edge[now].size() >= 2) || edge[now].size() >= 3){ flag = true; vi ind; rep(i,0,edge[now].size()){ if(ans.empty() || (ans.back()^1) != index[now][i]) ind.pb(index[now][i]); } ll len = ans.size(); rep(i,0,2){ ans.pb(ind[i]); ans.pb(ind[i]^1); } rep(i,0,2){ ans.pb(ind[i]^1); ans.pb(ind[i]); } per(i,len-1,0) ans.pb(ans[i]); break; } ll next = -1; rep(i,0,edge[now].size()){ if(ans.empty() || index[now][i] != (ans.back()^1)){ ans.pb(index[now][i]); next = edge[now][i]; } } if(next == -1) break; now = next; } } if(flag) return ans; else 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...