Untitled

 avatar
unknown
plain_text
2 years ago
997 B
8
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