Submission #1235542

#TimeUsernameProblemLanguageResultExecution timeMemory
1235542jasonicThousands Islands (IOI22_islands)C++20
12.35 / 100
121 ms13792 KiB
#include "islands.h" #include <bits/stdc++.h> #include <variant> using namespace std; #define ll long long variant<bool, std::vector<int>> find_journey(int n, int m, std::vector<int> u, std::vector<int> v) { vector<vector<int>> adjlist(n); map<pair<int, int>, int> edges; for(int i = 0; i < m; i++) { adjlist[u[i]].push_back(v[i]); edges[make_pair(u[i], v[i])] = i; } vector<int> parent(n, -1); vector<int> edgeUsed(n, -1); vector<bool> vis(n, false); queue<int> bfs; bfs.push(0); vis[0] = true; while(!bfs.empty()) { int curr = bfs.front(); bfs.pop(); int one = -1, two = -1; for(auto i : adjlist[curr]) if(!vis[i]) { if(one == -1) one = i; else if(two == -1) { two = i; break; } } if(two != -1) { vector<int> order; vector<int> ans; int t1 = parent[curr]; int t2 = curr; while(t2 != 0) { order.push_back(edges[make_pair(t1, t2)]); t1 = parent[t1]; t2 = parent[t2]; } reverse(order.begin(), order.end()); for(auto i : order) ans.push_back(i); int e0to1, e1to0, e0to2, e2to0; e0to1 = edges[make_pair(curr, one)]; e1to0 = edges[make_pair(one, curr)]; e0to2 = edges[make_pair(curr, two)]; e2to0 = edges[make_pair(two, curr)]; vector<int> cancel({e0to1, e1to0, e0to2, e2to0, e1to0, e0to1, e2to0, e0to2}); for(auto i : cancel) ans.push_back(i); reverse(order.begin(), order.end()); for(auto i : order) ans.push_back(i); return ans; } else if(one != -1) { bfs.push(one); parent[one] = curr; vis[one] = true; } } 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...