Submission #1288858

#TimeUsernameProblemLanguageResultExecution timeMemory
1288858peterandvoiSenior Postmen (BOI14_postmen)C++20
100 / 100
438 ms86276 KiB
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "C:\debug.h"
#else
#define debug(...) 42
#endif

int main() {
  ios::sync_with_stdio(false); 
  cin.tie(nullptr);
  int n, m;
  cin >> n >> m;
  vector<int> deg(n);
  vector<vector<pair<int, int>>> g(n);
  for (int i = 0; i < m; ++i) {
    int u, v;
    cin >> u >> v;
    --u, --v;
    ++deg[u], ++deg[v];
    g[u].push_back({v, i});
    g[v].push_back({u, i});
  }
  for (int i = 0; i < n; ++i) {
    assert(deg[i] % 2 == 0);
  }
  vector<int> res;
  vector<bool> used(m);
  auto dfs = [&](auto self, int u) -> void {
    while (g[u].size()) {
      auto [v, id] = g[u].back();
      g[u].pop_back();
      if (used[id]) {
        continue;
      }
      used[id] = 1;
      self(self, v);
    }
    res.push_back(u);
  };
  dfs(dfs, 0);
  assert((int) res.size() == m + 1);
  vector<bool> in(n);
  vector<int> st;
  vector<vector<int>> cyc;
  for (int i = 0; i <= m; ++i) {
    if (in[res[i]]) {
      cyc.push_back({res[i]});
      while (st.size() && st.back() != res[i]) {
        cyc.back().push_back(st.back());
        in[st.back()] = 0;
        st.pop_back();
      } 
    } else {
      in[res[i]] = 1;
      st.push_back(res[i]);
    }
  }
  assert((int) st.size() == 1 && st[0] == 0);
  for (auto &v : cyc) {
    for (int u : v) {
      cout << u + 1 << " ";
    }
    cout << "\n";
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...