zoukankan      html  css  js  c++  java
  • tarjan 算法求无向图的桥_板子

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<vector>using namespace std;
    ​
    const int SIZE = 100010;
    int head[SIZE], ver[SIZE * 2], Next[SIZE * 2];
    int dfn[SIZE], low[SIZE];
    int n, m, tot, num;
    bool bridge[SIZE * 2];
    ​
    void add(int x, int y) {
        ver[++tot] = y, Next[tot] = head[x], head[x] = tot;
    }
    ​
    void tarjan(int x, int in_edge) {
        dfn[x] = low[x] = ++num;
        for (int i = head[x]; i; i = Next[i]) {
            int y = ver[i];
            if (!dfn[y]) {
                tarjan(y, i);
                low[x] = min(low[x], low[y]);
                if (low[y] > dfn[x])
                    bridge[i] = bridge[i ^ 1] = true;
            }
            else if (i != (in_edge ^ 1))
                low[x] = min(low[x], dfn[y]);
        }
    }
    ​
    int main() {
        // [[0,1],[1,2],[2,0],[1,3]]
        cin >> n >> m;
        tot = 1;
        for (int i = 1; i <= m; i++) {
            int x, y;
            scanf("%d%d", &x, &y);
            add(x, y), add(y, x);
        }
        for (int i = 1; i <= n; i++)
            if (!dfn[i]) tarjan(i, 0);
        for (int i = 2; i < tot; i += 2)
            if (bridge[i])
                printf("%d %d
    ", ver[i ^ 1], ver[i]);
    }
  • 相关阅读:
    广告术语及缩写
    run `npm audit fix` to fix them, or `npm audit` for details
    Notes:SVG(2)---各种常见图形
    Notes:SVG(1)
    Notes:indexedDB使用
    Notes: select选择框
    Notes:DOM的事件模拟
    Notes: DOM Range
    Git-Notes
    Javascript一些实用技巧
  • 原文地址:https://www.cnblogs.com/jaszzz/p/13061940.html
Copyright © 2011-2022 走看看