#include <bits/stdc++.h>
#include "islands.h"
// #include "grader.cpp"
using namespace std;
const int N = 2e5 + 10;
int n, m, vis[N];
vector<int> g[N], V;
bool res[N];
vector<int> ans;
vector<int> path;
void get(int v){
if (ans.size()) return ;
if (g[v].size() >= 3 or (v == 0 and g[v].size() >= 2)){
res[0] = 1;
int prv = -1;
if (path.size()) prv = path.back();
int e1 = -1, e2 = -1;
if (prv == -1){
for (int e : g[v]){
if (e1 == -1)
e1 = e;
else
e2 = e;
}
}
else{
for (int e : g[v]){
if (e == prv) continue;
if (e == (prv ^ 1)) continue;
if (e1 == -1) e1 = e;
else e2 = e;
}
}
ans = path;
ans.push_back(e1);
ans.push_back(e1 ^ 1);
ans.push_back(e2);
ans.push_back(e2 ^ 1);
ans.push_back(e1 ^ 1);
ans.push_back(e1);
ans.push_back(e2 ^ 1);
ans.push_back(e2);
while (path.size()){
ans.push_back(path.back());
path.pop_back();
}
return ;
}
vis[v] = 1;
for (int e : g[v]){
int u = V[e];
if (!vis[u]){
path.push_back(e);
if (ans.size()) return ;
get(u);
if (ans.size()) return ;
path.pop_back();
}
}
}
variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> vv) {
V = vv;
n = N, m = M;
for (int i = 0; i < m; i ++){
g[U[i]].push_back(i);
}
get(0);
if (!res[0]) return false;
else return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |