This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <variant>
#include "islands.h"
using namespace std;
typedef int ll;
void dfs1(ll k, vector<vector<pair<ll, ll>>> &g, vector<bool> &used){
if(used[k]) return;
used[k]=true;
for(ll i=0; i<g[k].size(); i++){
dfs1(g[k][i].first, g, used);
}
}
vector<ll> s;
vector<ll> color;
int dfs(ll k, vector<vector<ll>> &g, vector<bool> &used){
color[k]=1;
s.push_back(k);
for(ll i: g[k]){
if(color[i]==0){
int d=dfs(i, g, used);
if(d!=-1){
return d;
}
}
else if(color[i]==1){
return i;
}
}
s.pop_back();
color[k]=2;
return -1;
}
variant<bool, vector<int>> find_journey(int n, int m, vector<int> u, vector<int> v){
bool bo=true;
if(m%2==1) bo=false;
if(bo){
for(ll i=0; i<m; i+=2){
if(u[i]!=v[i+1] || u[i+1]!=v[i]) bo=false;
}
}
if(n==2){
ll a=-1, b=-1, c=-1;
for(ll i=0; i<m; i++){
if(u[i]==0){
if(a==-1) a=i;
else b=i;
}
else c=i;
}
if(b==-1 || c==-1) return false;
return vector<int>({a, c, b, a, c, b});
}
else if(m==n*(n-1)){
ll a=-1, b=-1, c=-1, d=-1, e=-1, f=-1;
for(ll i=0; i<m; i++){
if(u[i]==0 && v[i]==1) a=i;
if(u[i]==1 && v[i]==0) b=i;
if(u[i]==1 && v[i]==2) c=i;
if(u[i]==2 && v[i]==1) d=i;
if(u[i]==2 && v[i]==0) e=i;
if(u[i]==0 && v[i]==2) f=i;
}
return vector<int>({a, c, e, f, d, b, e, c, a, b, d, f});
}
else if(bo){
vector<vector<pair<ll, ll>>> g(n);
vector<ll> res, res1;
for(ll i=0; i<m; i++){
g[u[i]].push_back({v[i], i});
}
if(g[0].size()>=2){
ll a=g[0][0].second, b=g[0][1].second;
ll a1, b1;
if(a%2==0) a1=a+1;
else a1=a-1;
if(b%2==0) b1=b+1;
else b1=b-1;
return vector<int>({a, a1, b, b1, a1, a, b1, b});
}
else{
bool f=false;
vector<bool> used(n);
dfs1(0, g, used);
for(ll i=0; i<n; i++){
if(used[i] && g[i].size()>=3) f=true;
}
if(!f) return false;
ll l=g[0][0].first, k=0;
res1.push_back(g[0][0].second);
res.push_back(g[0][0].second);
while(g[l].size()<3){
if(g[l][0].first==k){
res1.push_back(g[l][1].second);
res.push_back(g[l][1].second);
k=l;
l=g[l][1].first;
}
else{
res1.push_back(g[l][0].second);
res.push_back(g[l][0].second);
k=l;
l=g[l][0].first;
}
}
ll a=-1, b=-1;
for(ll i=0; i<3; i++){
if(g[l][i].first!=k){
if(a==-1) a=g[l][i].second;
else b=g[l][i].second;
}
}
ll a1, b1;
if(a%2==0) a1=a+1;
else a1=a-1;
if(b%2==0) b1=b+1;
else b1=b-1;
res.push_back(a);
res.push_back(a1);
res.push_back(b);
res.push_back(b1);
res.push_back(a1);
res.push_back(a);
res.push_back(b1);
res.push_back(b);
reverse(res1.begin(), res1.end());
for(ll asdf:res1) res.push_back(asdf);
return res;
}
}
else{
vector<vector<ll>> g(n);
color.resize(n);
vector<vector<pair<ll, ll>>> gr(n, vector<pair<ll, ll>> (n, {-1, -1}));
for(ll i=0; i<m; i++){
g[u[i]].push_back(v[i]);
if(gr[u[i]][v[i]].first==-1) gr[u[i]][v[i]].first=i;
else gr[u[i]][v[i]].second=i;
}
vector<bool> used(n, false);
int f=dfs(0, g, used);
if(f==-1) return false;
s.push_back(f);
ll qw=s.size();
vector<ll> to, c;
ll l=0;
for(ll i=0; i<qw; i++){
to.push_back(s[i]);
l=i;
if(s[i]==s[qw-1]) break;
}
for(ll i=l; i<qw; i++){
c.push_back(s[i]);
}
vector<ll> res;
for(ll i=0; i<to.size()-1; i++){
res.push_back(gr[to[i]][to[i+1]].first);
}
for(ll i=0; i<c.size()-1; i++){
res.push_back(gr[c[i]][c[i+1]].first);
}
for(ll i=0; i<c.size()-1; i++){
res.push_back(gr[c[i]][c[i+1]].second);
}
for(ll i=c.size()-2; i>=0; i--){
res.push_back(gr[c[i]][c[i+1]].first);
}
for(ll i=c.size()-2; i>=0; i--){
res.push_back(gr[c[i]][c[i+1]].second);
}
for(ll i=to.size()-2; i>=0; i--){
res.push_back(gr[to[i]][to[i+1]].first);
}
return res;
}
}
Compilation message (stderr)
islands.cpp: In function 'void dfs1(ll, std::vector<std::vector<std::pair<int, int> > >&, std::vector<bool>&)':
islands.cpp:9:15: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
9 | for(ll i=0; i<g[k].size(); i++){
| ~^~~~~~~~~~~~
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:155:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
155 | for(ll i=0; i<to.size()-1; i++){
| ~^~~~~~~~~~~~
islands.cpp:158:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
158 | for(ll i=0; i<c.size()-1; i++){
| ~^~~~~~~~~~~
islands.cpp:161:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
161 | for(ll i=0; i<c.size()-1; i++){
| ~^~~~~~~~~~~
# | 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... |