#include "islands.h"
#include <variant>
#include <vector>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define F first
#define S second
#define sz size()
const int W =2e5+2;
vector<pair<ll,ll> > vec,vec2;
pair<ll,ll> p[W];
vector<pair<ll,ll> > v[W];
ll vis[W];
void dfs(ll x, ll in)
{
vis[x] = 1;
for(int i = 0; i < v[x].sz; i++)
{
ll in2 = v[x][i].S;
ll newn = v[x][i].F;
if(in%2==0)
{
if(in2-in==1) continue;
}
else
{
if(in-in2==1) continue;
}
if(vis[newn])
{
if(vec.sz) continue;
ll y = x;
vec.push_back({newn,in2});
while(y!=newn){ vec.push_back(p[y]); y = p[y].F;}
while(y!=0) { vec2.push_back(p[y]); y = p[y].F;}
}
p[newn] = {x,in2};
dfs(newn,in2);
}
}
ll d(ll x)
{
if(x%2) x--; else x++;
return x;
}
std::variant<bool, std::vector<int>> find_journey( int N, int M, std::vector<int> U, std::vector<int> V) {
for(int i = 0; i < M; i++)
{
ll x = U[i] , y = V[i];
v[x].push_back({y,i});
}
dfs(0,-1);
if(vec.sz==0) return false;
// for(int i = 0; i < v[x].sz; i++) cout << vec[i].F << " " << vec[i].S << endl;
vector<int> ans;
for(int i = vec2.sz-1; i >= 0; i--) ans.push_back(vec2[i].S);
for(int i = vec.sz-1; i>= 0; i--) ans.push_back(vec[i].S);
for(int i = 0; i < vec.sz; i--) ans.push_back(d(vec[i].S));
for(int i = 0; i < vec.sz; i--) ans.push_back(d(vec[i].S));
for(int i = vec.sz-1; i>= 0; i--) ans.push_back(vec[i].S);
for(int i = 0; i < vec2.sz; i++) ans.push_back(d(vec2[i].S));
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... |