제출 #1227212

#제출 시각아이디문제언어결과실행 시간메모리
1227212brinton수천개의 섬 (IOI22_islands)C++20
8.40 / 100
43 ms8264 KiB
#include "islands.h"
// #include "grader.cpp"
#include <bits/stdc++.h>
using namespace std;

variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) {
  auto co = [](int id){
    if(id%2 == 0) return id+1;
    else return id-1;
  };

  vector<set<pair<int,int>>> edges(N);// nxt,id
  for(int i = 0;i < M;i+=2){
    edges[U[i]].insert({V[i],i});
  }
  vector<bool> vis(N,false);
  set<int> anc;

  vector<pair<int,int>> nxt_edges(N);// nxt,id
  vector<int> ans;
  function<void(int)> dfs = [&](int cur){
    vis[cur] = true;
    anc.insert(cur);
    for(auto [nxt,id]:edges[cur]){
      if(anc.count(nxt)) {
        // find the answer
        vector<int> before_loop;
        int croot = 0;
        while(croot != nxt){
          before_loop.push_back(nxt_edges[croot].second);
          croot = nxt_edges[croot].first;
        }
        vector<int> in_loop;
        do{
          in_loop.push_back(nxt_edges[croot].second);
          croot = nxt_edges[croot].first;
        }while(croot != nxt);
        for(auto &i:before_loop) ans.push_back(i);
        for(auto &i:in_loop) ans.push_back(i);
        for(auto &i:in_loop) ans.push_back(co(i));
        reverse(before_loop.begin(),before_loop.end());
        reverse(in_loop.begin(),in_loop.end());
        for(auto &i:in_loop) ans.push_back(i);
        for(auto &i:in_loop) ans.push_back(co(i));
        for(auto &i:before_loop) ans.push_back(i);
        return;
      }
      if(vis[nxt]) continue;
      nxt_edges[cur] = {nxt,id};
      dfs(nxt);
      if(!ans.empty()) return;
    }
    anc.erase(cur);
  };
  dfs(0);
  if(ans.empty()) return false;
  return ans;
}
#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...