제출 #1320464

#제출 시각아이디문제언어결과실행 시간메모리
1320464BigBadBullyThousands Islands (IOI22_islands)C++20
10.15 / 100
21 ms6064 KiB
#include "islands.h" #include <bits/stdc++.h> #define pii pair<int,int> #define ff first #define ss second using namespace std; variant<bool, vector<int>> find_journey( int n, int m, vector<int> u, vector<int> v) { vector<int> dumy = {0,0}; vector<vector<pii>> graph(n); for(int i = 0; i < m; i++) graph[u[i]].push_back({v[i],i}); vector<int> vis(n,0); vector<int> res,cyc; function<int(int,int)> dfs = [&](int cur,int prev) { if(vis[cur]==2)return -1; if(vis[cur]==1)return cur; vis[cur] = 1; bool sen = 0; for(pii a: graph[cur]) { if(a.ff==prev) if(!sen){ sen = 1; continue; } int val = dfs(a.ff,cur); if(val>=0) { cyc.push_back(val); res.push_back(a.ss); return cur; } } vis[cur] = 2; return -1; }; dfs(0,0); cyc.push_back(0); if(cyc.size()==1) return false; reverse(res.begin(),res.end()); reverse(cyc.begin(),cyc.end()); int k = res.size(); int r =0; while(cyc[r] != cyc.back())r++; vector<int> ans; for(int i = 0; i < r;i++) ans.push_back(res[i]); for(int i = r; i < k; i++) ans.push_back(res[i]); ans.push_back(res[r]^1); ans.push_back(res[r]); for(int i = k-1; i > r; i--) ans.push_back(res[i]); ans.push_back(res[r]^1); for(int i = r-1; i >= 0;i--) ans.push_back(res[i]); return dumy; }
#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...