256392026-02-23 20:47:29GeneratrollHálózatjavításcpp17Compilation error
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n, m;
	cin >> n >> m;
	vector<vector<int>> g(n + 1);
	for (int i = 0; i < m; i++) {
		int u, v;
		cin >> u >> v;
		g[u].push_back(v);
	}
	vector<int> d(n + 1, 0), l(n + 1, 0), s;
	vector<bool> b(n + 1, false);
	vector<vector<int>> c;
	int t = 0;
	auto f1 = [&](auto self, int u) -> void {
		d[u] = l[u] = ++t;
		s.push_back(u);
		b[u] = true;
		for (int v : g[u]) {
			if (d[v] == 0) {
				self(self, v);
				l[u] = min(l[u], l[v]);
			} else if (b[v]) {
				l[u] = min(l[u], d[v]);
			}
		}
		if (l[u] == d[u]) {
			vector<int> sc;
			while (true) {
				int v = s.back();
				s.pop_back();
				b[v] = false;
				sc.push_back(v);
				if (u == v) {
					break;
				}
			}
			c.push_back(sc);
		}
	};
	for (int i = 1; i <= n; i++) {
		if (d[i] == 0) {
			f1(f1, i);
		}
	}
	int si = -1;
	for (int i = 0; i < (int)c.size(); i++) {
		if (c[i].size() > 1) {
			si = i;
			break;
		}
	}
	if (si == -1) {
		cout << 0 << '\n';
		return 0;
	}
	vector<int> w = c[si];
	vector<bool> p(n + 1, false);
	for (int u : w) {
		p[u] = true;
	}
	auto f2 = [&](int su, int sv) {
		vector<int> id(n + 1, 0);
		for (int u : w) {
			for (int v : g[u]) {
				if (!p[v]) {
					continue;
				}
				if (u == su && v == sv) {
					continue;
				}
				id[v]++;
			}
		}
		queue<int> k;
		for (int u : w) {
			if (id[u] == 0) {
				k.push(u);
			}
		}
		int ct = 0;
		while (!k.empty()) {
			int u = k.front();
			k.pop();
			ct++;
			for (int v : g[u]) {
				if (!p[v]) {
					continue;
				}
				if (u == su && v == sv) {
					continue;
				}
				if (--id[v] == 0) {
					k.push(v);
				}
			}
		}
		int sz = w.size();
		return ct == sz;
	};
	vector<int> o(n + 1, 0), r;
	auto f3 = [&](auto self, int su, int sv, vector<int>& res) -> bool {
		for (int u : w) {
			o[u] = 0;
		}
		r.clear();
		auto dfs = [&](auto self2, int u) -> bool {
			o[u] = 1;
			r.push_back(u);
			for (int v : g[u]) {
				if (!p[v]) {
					continue;
				}
				if (u == su && v == sv) {
					continue;
				}
				if (o[v] == 1) {
					bool f = false;
					for (int x : r) {
						if (x == v) {
							f = true;
						}
						if (f) {
							res.push_back(x);
						}
					}
					return true;
				}
				if (o[v] == 0 && self2(self2, v)) {
					return true;
				}
			}
			o[u] = 2;
			r.pop_back();
			return false;
		};
		for (int u : w) {
			if (o[u] == 0 && dfs(dfs, u)) {
				return true;
			}
		}
		return false;
	};
	vector<int> y;
	f3(f3, -1, -1, y);
	vector<pair<int, int>> z;
	for (int i = 0; i < (int)y.size(); i++) {
		z.push_back({y[i], y[(i + 1) % y.size()]});
	}
	pair<int, int> be = {-1, -1};
	while (!z.empty()) {
		pair<int, int> e = z.back();
		z.pop_back();
		if (f2(e.first, e.second)) {
			be = e;
			break;
		}
		vector<int> n2;
		f3(f3, e.first, e.second, n2);
		vector<int> sc(n + 1, 0);
		for (int i = 0; i < (int)n2.size(); i++) {
			sc[n2[i]] = n2[(i + 1) % n2.size()];
		}
		vector<pair<int, int>> nc;
		for (auto& ee : z) {
			if (sc[ee.first] == ee.second) {
				nc.push_back(ee);
			}
		}
		z = nc;
	}
	int ux = be.first, uy = be.second;
	vector<int> j(n + 1, 0);
	for (int u = 1; u <= n; u++) {
		for (int v : g[u]) {
			if (u == ux && v == uy) {
				continue;
			}
			j[v]++;
		}
	}
	queue<int> k;
	vector<int> v;
	for (int i = 1; i <= n; i++) {
		if (j[i] == 0) {
			k.push(i);
		}
	}
	while (!k.empty()) {
		int u = k.front();
		k.pop();
		v.push_back(u);
		for (int nxt : g[u]) {
			if (u == ux && nxt == uy) {
				continue;
			}
			if (--j[nxt] == 0) {
				k.push(nxt);
			}
		}
	}
	ll m1 = 1000000007, m2 = 1000000009;
	vector<ll> a(n + 1, 0), b(n + 1, 0), e(n + 1, 0), f(n + 1, 0);
	a[uy] = 1;
	b[uy] = 1;
	for (int u : v) {
		for (int nxt : g[u]) {
			if (u == ux && nxt == uy) {
				continue;
			}
			a[nxt] = (a[nxt] + a[u]) % m1;
			b[nxt] = (b[nxt] + b[u]) % m2;
		}
	}
	e[ux] = 1;
	f[ux] = 1;
	for (int i = (int)v.size() - 1; i >= 0; i--) {
		int u = v[i];
		for (int nxt : g[u]) {
			if (u == ux && nxt == uy) {
				continue;
			}
			e[u] = (e[u] + e[nxt]) % m1;
			f[u] = (f[u] + f[nxt]) % m2;
		}
	}
	ll h = a[ux], i = b[ux];
	vector<pair<int, int>> as;
	as.push_back({ux, uy});
	for (int u : w) {
		for (int nxt : g[u]) {
			if (u == ux && nxt == uy) {
				continue;
			}
			if (!p[nxt]) {
				continue;
			}
			if ((a[u] * e[nxt]) % m1 == h && (b[u] * f[nxt]) % m2 == i) {
				as.push_back({u, nxt});
			}
		}
	}
	cout << as.size() << '\n';
	for (auto& edge : as) {
		cout << edge.first << ' ' << edge.second << '\n';
	}
	return 0;
}
Compilation error
open /var/local/lib/isolate/426/box/a.out: no such file or directory
main.cpp: In function 'int main()':
main.cpp:207:33: error: conflicting declaration 'std::vector<long long int> b'
  207 |         vector<ll> a(n + 1, 0), b(n + 1, 0), e(n + 1, 0), f(n + 1, 0);
      |                                 ^
main.cpp:16:22: note: previous declaration as 'std::vector<bool> b'
   16 |         vector<bool> b(n + 1, false);
      |                      ^