Submission #1352869

#TimeUsernameProblemLanguageResultExecution timeMemory
1352869yuqziiSenior Postmen (BOI14_postmen)C++20
38 / 100
237 ms327680 KiB
#include <bits/stdc++.h>

using namespace std;

int n, m;
vector<set<int>> adj;
map<pair<int, int>, int> edgeIdx;

void cycle(int u, vector<bool>& vis, set<pair<int, int>> used, stack<int>& st, vector<int>& out) {
	if (vis[u]) {
		int v = st.top();
		out.push_back(u);
		while (v != u) {
			adj[out.back()].erase(v);
			adj[v].erase(out.back());
			out.push_back(v);
			st.pop();
			v = st.top();
		}

		adj[out.back()].erase(u);
		adj[u].erase(out.back());

		return;
	}

	vis[u] = true;
	st.push(u);
	for (int v : adj[u]) {
		if (used.count({u, v}) || used.count({v, u})) continue;
		used.emplace(u, v);
		used.emplace(v, u);

		cycle(v, vis, used, st, out);
		if (!out.empty()) return;
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

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

	for (int u = 0; u < n; u++) {
		while (!adj[u].empty()) {
			vector<int> c;
			set<pair<int, int>> used;
			vector<bool> vis(n);
			stack<int> st;

			cycle(u, vis, used, st, c);

			if (c.empty()) continue;

			for (int v : c) cout << v + 1 << ' ';
			cout << '\n';
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...