Submission #1341533

#TimeUsernameProblemLanguageResultExecution timeMemory
1341533goats_9Senior Postmen (BOI14_postmen)C++20
100 / 100
221 ms46860 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), s, ord;
	s.push_back(0);
	while (!s.empty()) {
		int u = s.back();
		while (!g[u].empty()) {
			auto [v, i] = g[u].back();
			if (vis[i]) g[u].pop_back();
			else break;
		}
		if (!g[u].empty()) {
			auto [v, i] = g[u].back();
			g[u].pop_back();
			vis[i] = 1;
			s.push_back(v);
		} else s.pop_back(), ord.push_back(u);
	}
	reverse(ord.begin(), ord.end());
	vector<vector<int>> cycles;
	vector<int> 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);
		}
		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...