제출 #1269984

#제출 시각아이디문제언어결과실행 시간메모리
1269984rtri어르신 집배원 (BOI14_postmen)C++20
38 / 100
1092 ms15552 KiB
#include <bits/stdc++.h>
using namespace std;

int used_edges = 0;
vector<bool> used;
vector<vector<pair<int, int>>> adj;

vector<bool> vis;
vector<int> sol;
bool dfs(int u, int start = -1, int p = -1) {
  if (u == start) {
    return true;
  }
  if (start == -1)
    start = u;

  if (vis[u])
    return false;
  vis[u] = 1;

  for (auto [v, edg] : adj[u]) {
    if (!used[edg] && v != p) {
      if (dfs(v, start, u)) {
        used[edg] = 1;
        used_edges++;
        sol.push_back(u);
        return true;
      }
    }
  }

  return false;
}

int main() {
  int n, m;
  cin >> n >> m;

  adj.resize(n);
  used.resize(m);
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    adj[u].push_back({v, i});
    adj[v].push_back({u, i});
  }

  vis.resize(n);
  vector<vector<int>> sols;
  while (used_edges != m) {
    for (int i = 0; i < n; i++) {
      fill(vis.begin(), vis.end(), false);
      if (dfs(i)) {
        reverse(sol.begin(), sol.end());
        sols.push_back(sol);
        sol.clear();
      }
    }
  }

  for (auto sol : sols) {
    for (int idx : sol)
      cout << idx + 1 << " ";
    cout << "\n";
  }

  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...