제출 #1341531

#제출 시각아이디문제언어결과실행 시간메모리
1341531goats_9어르신 집배원 (BOI14_postmen)C++20
0 / 100
0 ms344 KiB
/* Author: goats_9 */

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int main() {
	cin.tie(0)->sync_with_stdio(0);
	int n, m;
	cin >> n >> m;
	vector<pair<int, int>> e(m);
	vector<vector<pair<int, int>>> g(n);
	for (int i = 0; i < m; i++) {
		auto& [u, v] = e[i];
		cin >> u >> v;
		g[--u].emplace_back(--v, i);
		g[v].emplace_back(u, i);
	}
	vector<int> vis(m), ord;
	auto dfs = [&] (auto&& self, int u) -> void {
		ord.push_back(u);
		while (!g[u].empty()) {
			auto [v, i] = g[u].back();
			g[u].pop_back();
			if (vis[i]) continue;
			vis[i] = 1;
			self(self, v);
		}
	};
	dfs(dfs, 0);
	vector<vector<int>> cycles;
	vector<int> s, in(n);
	for (int u : ord) {
		if (in[u]) {
			vector<int> cyc;
			while (1) {
				int v = s.back();
				s.pop_back();
				in[v] = 0;
				cyc.push_back(v + 1);
				if (v == u) break;
			}
			reverse(cyc.begin(), cyc.end());
			cycles.push_back(cyc);
		} else {
			in[u] = 1;
			s.push_back(u);
		}
	}
	for (auto v : cycles) {
		for (auto u : v) cout << u << ' ';
		cout << '\n';
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...