# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1227206 | brinton | Thousands Islands (IOI22_islands) | C++20 | 0 ms | 0 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) {
auto co = [](int id){
if(id%2 == 0) return id+1;
else return id-1;
};
vector<set<pair<int,int>>> edges(N);// nxt,id
for(int i = 0;i < M;i++){
edges[U[i]].insert({V[i],i});
}
// if(edges[0].size() < 2) return false;
vector<int> ans;
vector<bool> vis(N,false);
int root = 0;
vector<int> to_root;
while(edges[root].size() <= 1){
if(edges[root].size() == 0) return false;
auto [nxt,id] = *edges[root].begin();
to_root.push_back(id);
vis[root] = true;
edges[root].erase({nxt,id});
edges[nxt].erase({root,co(id)});
root = nxt;
}
auto [nxt1,id1] = edges[root][0];
auto [nxt2,id2] = edges[root][1];
vector<int> ans{id1,co(id1),id2,co(id2),
co(id1),id1,co(id2),id2};
vector<int> ret = to_root;
for(auto &i:ans) ret.push_back(i);
for(int i = to_root.size()-1;i >= 0;i--) ret.push_back(to_root[i]);
return ret;
// return ans;
}