Submission #797053

#TimeUsernameProblemLanguageResultExecution timeMemory
797053penguinmanThousands Islands (IOI22_islands)C++17
1.75 / 100
1116 ms587452 KiB
#include "islands.h"

#include <bits/stdc++.h>
#include <variant>

using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
using ll = int;
using vi = vector<ll>;
using vii = vector<vi>;
using pii = std::pair<ll,ll>;

#define rep(i,j,k) for(ll i=ll(j); i<ll(k); i++)
#define REP(i,j,k) for(ll i=ll(j); i<=ll(k); i++)
#define per(i,j,k) for(ll i=ll(j); i>=ll(k); i--)
#define all(a) a.begin(),a.end()
#define pb emplace_back
#define ln "\n"

std::variant<bool, std::vector<int>> find_journey(int N, int M, std::vector<int> U, std::vector<int> V) {
  vii edge(N), index(N);
  rep(i,0,M){
    edge[U[i]].pb(V[i]);
    index[U[i]].pb(i);
  }
  vi ans;
  bool flag = false;
  {
    ll now = 0;
    while(true){
      if((ans.empty() && edge[now].size() >= 2) || edge[now].size() >= 3){
        flag = true;
        vi ind;
        rep(i,0,edge[now].size()){
          if(ans.empty() || (ans.back()^1) != index[now][i]) ind.pb(index[now][i]);
        }
        ll len = ans.size();
        rep(i,0,2){
          ans.pb(ind[i]);
          ans.pb(ind[i]^1);
        }
        rep(i,0,2){
          ans.pb(ind[i]^1);
          ans.pb(ind[i]);
        }
        per(i,len-1,0) ans.pb(ans[i]);
        break;
      }
      ll next = -1;
      rep(i,0,edge[now].size()){
        if(ans.empty() || index[now][i] != (ans.back()^1)){
          ans.pb(index[now][i]);
          next = edge[now][i];
        }
      }
      if(next == -1) break;
      now = next;
    }
  }
  if(flag) return ans;
  else return false;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...