제출 #1080019

#제출 시각아이디문제언어결과실행 시간메모리
1080019LittleOrange수천개의 섬 (IOI22_islands)C++17
5 / 100
20 ms4436 KiB
#include "islands.h" #include <variant> #include <vector> #include <bits/stdc++.h> using namespace std; using ll = int; std::variant<bool, std::vector<int>> find_journey( int n, int m, std::vector<int> u, std::vector<int> v){ if (n == 2){ vector<ll> a,b; for(ll i = 0;i<m;i++){ if (u[i]==0) a.push_back(i); else b.push_back(i); } if (a.size()<2||b.size()<1) return false; return vector<ll>({a[0],b[0],a[1],a[0],b[0],a[1]}); } if(0){ vector<ll> a(6); for(ll i = 0;i<m;i++){ if (u[i]==0&&v[i]==1) a[0] = i; if (u[i]==1&&v[i]==2) a[1] = i; if (u[i]==2&&v[i]==0) a[2] = i; if (u[i]==0&&v[i]==2) a[3] = i; if (u[i]==2&&v[i]==1) a[4] = i; if (u[i]==1&&v[i]==0) a[5] = i; } return vector<ll>({a[0],a[1],a[2],a[3],a[4],a[5],a[2],a[1],a[0],a[5],a[4],a[3]}); } if(m%2==0){ vector<vector<ll>> con(n); for(ll i = 0;i<m;i++){ con[u[i]].push_back(i); } vector<ll> c(n,0),st; function<bool(ll)> dfs; dfs = [&](ll i){ c[i] = 1; for(ll j : con[i]) if(!c[v[j]]){ st.push_back(j); if(dfs(v[j])) return true; st.pop_back(); } return false; }; bool ok = dfs(0); if(!ok) return false; vector<ll> ans; for(ll i : st) ans.push_back(i); reverse(st.begin(),st.end()); for(ll i : st) ans.push_back(i^1); for(ll i : st) ans.push_back(i); reverse(st.begin(),st.end()); for(ll i : st) ans.push_back(i^1); return ans; } if (n == 4){ return std::vector<int>({0, 1, 2, 4, 0, 3, 2, 1, 4, 3}); } 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...