이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "islands.h"
#include <bits/stdc++.h>
#include <variant>
#define ll long long
#define sz(s) (int)s.size()
#define pb push_back
#define in insert
#define lb lower_bound
#define ub upper_bound
#define pii pair<int,int>
#define F first
#define S second
#define all(v) v.begin(),v.end()
using namespace std;
const int MAX=2e5+10;
vector<pii> g[MAX];
int use[MAX];
int pr[MAX];
int d[MAX];
int cycle;
void dfs(int v,int p=-1){
pr[v]=p;
use[v]=1;
for(auto to:g[v]){
if(pr[v]!=-1&&to.S==(pr[v]%2==0?pr[v]+1:pr[v]-1))continue;
if(use[to.F]){
cycle=to.S;
return;
}
else{
d[to.F]=d[v]+1;
dfs(to.F,to.S);
}
}
use[v]=1;
}
variant<bool, vector<int>> find_journey(int N, int M, vector<int> U,vector<int> V){
cycle=-1;
map<pii,int> mp;
for(int i=0;i<M;i+=2){
g[U[i]].pb({V[i],i});
g[V[i]].pb({U[i],i+1});
mp[{U[i],V[i]}]=i;
}
dfs(0);
if(cycle==-1)return false;
vector<int> a,b;
int X=U[cycle],Y=V[cycle];
while(X!=Y){
if(d[X]>d[Y]){
a.pb(pr[X]);
X=U[pr[X]];
}
else{
b.pb((pr[Y]%2==0?pr[Y]+1:pr[Y]-1));
Y=U[pr[Y]];
}
}
// cout<<cycle<<"\n";
swap(a,b);
b.pb(cycle);
for(int x:a)b.pb(x);
// for(int x:b)cout<<x<<" ";
// cout<<"\n";
vector<int> c;
while(X!=0){
c.pb(pr[X]);
X=U[pr[X]];
}
vector<int> ans;
reverse(all(c));
for(int x:c)ans.pb(x);
for(int x:b)ans.pb(x);
reverse(all(b));
for(int x:b){
ans.pb((x%2==0?x+1:x-1));
}
for(int x:b)ans.pb(x);
reverse(all(b));
for(int x:b){
ans.pb((x%2==0?x+1:x-1));
}
reverse(all(c));
for(int x:c)ans.pb(x);
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... |