제출 #1149595

#제출 시각아이디문제언어결과실행 시간메모리
1149595byunjaewoo수천개의 섬 (IOI22_islands)C++20
0 / 100
17 ms3144 KiB
#include "islands.h" #include <bits/stdc++.h> using namespace std; variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) { int a=-1, b=-1, c=-1, d=-1; for(int i=0; i<M; i+=2) { if(U[i]==0) { if(a<0) a=i, c=i+1; else if(b<0) b=i, d=i+1; } if(V[i]==0) { if(a<0) a=i+1, c=i; else if(b<0) b=i+1, d=i; } } if(b>=0) { vector<int> ret; ret.push_back(a), ret.push_back(c), ret.push_back(b), ret.push_back(d); ret.push_back(c), ret.push_back(a), ret.push_back(d), ret.push_back(b); return ret; } int prv[1010], pw[1010]; for(int i=0; i<N; i++) prv[i]=-1, pw[i]=-1; vector<pair<int, int>> adj[1010]; queue<int> q; for(int i=0; i<M; i++) adj[U[i]].push_back({V[i], i}); prv[0]=0, q.push(0); while(!q.empty()) { int curr=q.front(); q.pop(); for(auto [next, k]:adj[curr]) if(prv[next]<0) prv[next]=curr, pw[next]=k; } auto f=[](int a) {return (a&1)?(a-1):(a+1);}; for(int i=0; i<N; i++) if(prv[i]>=0 && adj[i].size()>=3) { vector<int> ret; for(int j=i; j; j=prv[j]) ret.push_back(pw[j]); reverse(ret.begin(), ret.end()); for(auto [next, k]:adj[i]) if(f(k)!=pw[i]) ret.push_back(k), ret.push_back(f(k)); for(auto [next, k]:adj[i]) if(f(k)!=pw[i]) ret.push_back(f(k)), ret.push_back(k); for(int j=i; j; j=prv[j]) ret.push_back(f(pw[j])); return ret; } 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...