zoukankan      html  css  js  c++  java
  • P3388 【模板】割点(割顶)题解 tarjan求割点

    题目链接:https://www.luogu.com.cn/problem/P3388

    参考博客:http://keyblog.cn/article-80.html

    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 20020, maxm = 200020;
    struct Edge {
        int v, nxt;
        Edge() {};
        Edge(int _v, int _nxt) { v = _v; nxt = _nxt; }
    } edge[maxm];
    int n, m, ecnt, head[maxn];
    void init() {
        memset(head, -1, sizeof(int)*(n+1));
    }
    void addedge(int u, int v) {
        edge[ecnt] = Edge(v, head[u]); head[u] = ecnt ++;
        edge[ecnt] = Edge(u, head[v]); head[v] = ecnt ++;
    }
    int num, dfn[maxn], low[maxn], rt;
    bool point[maxn];
    void tarjan(int u, int p) {
        dfn[u] = low[u] = ++ num;
        int son = -1;
        for (int i = head[u]; i != -1; i = edge[i].nxt) {
            int v = edge[i].v;
            if (v == p) continue;
            if (!dfn[v]) {
                tarjan(v, u);
                low[u] = min(low[u], low[v]);
                if (u != rt && dfn[u] <= low[v])
                    point[u] = true;
                if (son == -1) son = v;
                else if (son != v) son = -2;
            }
            else low[u] = min(low[u], dfn[v]);
        }
        if (u == rt && son == -2) point[u] = true;
    }
    int main() {
        cin >> n >> m;
        init();
        while (m --) {
            int u, v;
            cin >> u >> v;
            addedge(u, v);
        }
        for (int i = 1; i <= n; i ++) {
            if (!dfn[i]) {
                rt = i;
                tarjan(i, -1);
            }
        }
        int cnt = 0;
        for (int i = 1; i <= n; i ++) if (point[i]) cnt ++;
        cout << cnt << endl;
        for (int i = 1; i <= n; i ++) if (point[i]) cout << i << " ";
        return 0;
    }
    
  • 相关阅读:
    C#分割字符串
    Android中this、super的区别
    Android activity跳转方式
    Android中的各种单位
    Android布局方式_RelativeLayout
    Parallelism , Partitioner
    编译hadoop,spark遇到的问题总结
    scala,spark练习题提高
    元组复杂例子
    sparksql 操作hive
  • 原文地址:https://www.cnblogs.com/quanjun/p/12908015.html
Copyright © 2011-2022 走看看