#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> u, v;
vector<vector<int>> av;
bool cycle;
vector<bool> vis;
void dfs(int node) {
if (cycle) return;
vis[node] = true;
vector<int> targs;
for (int i = 1; i < (int)av[node].size(); i++) {
targs.push_back(v[av[node][i]]);
}
sort(targs.begin(), targs.end());
int s = targs.size();
for (int i = 1; i < s; i++) {
if (targs[i] == targs[i-1] || vis[targs[i]]) {
cycle = true;
return;
}
}
if (vis[targs[0]]) {
cycle = true;
return;
}
for (int i = 0; i < s; i++) {
dfs(targs[i]);
if (cycle) return;
}
}
variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) {
// tree -> impossible
n = N;
m = M;
u = U;
v = V;
av.clear();
av.resize(n);
vis.assign(n, false);
for (int i = 0; i < m; i++) {
av[u[i]].push_back(i);
}
cycle = false;
dfs(0);
if (n == 2) {
int cnt1 = 0, cnt2 = 0;
vector<int> a, b;
for (int i = 0; i < m; i++) {
if (u[i] == 0) {
cnt1++;
a.push_back(i);
}
else {
cnt2++;
b.push_back(i);
}
}
if (cnt1 < 2 || cnt2 < 1) return false;
vector<int> ans = {a[0], b[0], a[1], a[0], b[0], a[1]};
return ans;
}
else {
vector<int> goB, goC, b, c;
for (int i = 0; i < m; i++) {
if (u[i] == 0) {
if (v[i] == 1) goB.push_back(i);
else if (v[i] == 2) goC.push_back(i);
}
else if (u[i] == 1 && v[i] == 0) b.push_back(i);
else if (u[i] == 2 && v[i] == 0) c.push_back(i);
}
if (goB.size() && goC.size() && b.size() && c.size()) {
vector<int> ans = {goB[0], b[0], goC[0], c[0], b[0], goB[0], c[0], goC[0]};
return ans;
}
}
if (!cycle) return false;
}
Compilation message (stderr)
islands.cpp: In function 'std::variant<bool, std::vector<int, std::allocator<int> > > find_journey(int, int, std::vector<int>, std::vector<int>)':
islands.cpp:82:1: warning: control reaches end of non-void function [-Wreturn-type]
82 | }
| ^
# | 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... |