Submission #1207989

#TimeUsernameProblemLanguageResultExecution timeMemory
1207989HappyCapybaraThousands Islands (IOI22_islands)C++20
22.75 / 100
20 ms5828 KiB
#include "islands.h"
#include<bits/stdc++.h>
using namespace std;

variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V){
  vector<vector<pair<int,int>>> g(N);
  for (int i=0; i<M; i+=2){
    g[U[i]].push_back({V[i], i});
    g[V[i]].push_back({U[i], i+1});
  }
  vector<int> p1, p2;
  int cur = 0, prev = 0;
  while (true){
    vector<pair<int,int>> next;
    for (pair<int,int> neigh : g[cur]){
      if (neigh.first != prev) next.push_back(neigh);
    }
    if (next.size() == 0) return false;
    if (next.size() == 1){
      p1.push_back(next[0].second);
      prev = cur;
      cur = next[0].first;
    }
    if (next.size() >= 2){
      p2.push_back(next[0].second);
      p2.push_back(next[0].second ^ 1);
      p2.push_back(next[1].second);
      p2.push_back(next[1].second ^ 1);
      p2.push_back(next[0].second ^ 1);
      p2.push_back(next[0].second);
      p2.push_back(next[1].second ^ 1);
      p2.push_back(next[1].second);
      break;
    }
  }
  vector<int> res;
  for (int x : p1) res.push_back(x);
  for (int x : p2) res.push_back(x);
  reverse(p1.begin(), p1.end());
  for (int x : p1) res.push_back(x);
  return res;
}
#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...