Submission #1342563

#TimeUsernameProblemLanguageResultExecution timeMemory
1342563goats_9Pipes (CEOI15_pipes)C++20
0 / 100
593 ms3012 KiB
/* Author: goats_9 */

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

using ll = long long;

class DSU {
	int n;
	vector<int> p, rank;
	vector<pair<int, int>> bridge;

public:
	DSU (int _n) : n(_n), p(n), rank(n), bridge(n, {-1, -1}) { iota(p.begin(), p.end(), 0); }
	int get(int i) { return (p[i] == i) ? p[i] : (p[i] = get(p[i])); }
	void unite(int i, int j) {
		i = get(i), j = get(j);
		if (i == j) {
			bridge[i] = {-1, -1};
			return;
		}
		if (rank[i] < rank[j]) swap(i, j);
		if (rank[i] == rank[j]) ++rank[i];
		p[j] = i;
		bridge[j] = {i, j};
	}
	void bridges() {
		for (auto [u, v] : bridge) {
			if (u == -1) continue;
			cout << u + 1 << ' ' << v + 1 << '\n';
		}
	}
};

int main() {
	cin.tie(0)->sync_with_stdio(0);
	int n, m;
	cin >> n >> m;
	DSU dsu(n);
	for (int i = 0; i < m; i++) {
		int u, v;
		cin >> u >> v;
		dsu.unite(--u, --v);
	}
	dsu.bridges();
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...