Untitled
unknown
plain_text
2 years ago
997 B
11
Indexable
#include <iostream>
#include <vector>
#define vi vector<int>
#define pb push_back
using namespace std;
int n, m;
vector <vi> g;
vector <bool> used;
vector <int> fup;
vi tin;
int tcur;
void dfs(int v, int p) {
used[v] = true;
tcur++;
fup[v] = tcur;
tin[v] = tcur;
for (int u : g[v]) {
if (!used[u]) {
dfs(u, v);
fup[v] = min(fup[v], fup[u]);
if (fup[u] > tin[v]) {
cout << u + 1 << " " << v + 1 << endl;
}
}
else if (u != p) {
fup[v] = min(fup[v], tin[u]);
}
}
}
int main()
{
cin >> n >> m;
g.resize(n);
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
a--;
b--;
g[a].pb(b);
g[b].pb(a);
}
used.resize(n, false);
fup.resize(n, 1e9);
tin.resize(n, 0);
tcur = 0;
for (int i = 0; i < n; i++) {
if (!used[i]) {
dfs(i, -1);
}
}
return 0;
}
Editor is loading...
Leave a Comment