zoukankan      html  css  js  c++  java
  • 使用Tarjan进行缩点(有向图)

    int From[maxn], Laxt[maxn], To[maxn << 2], Next[maxn << 2], cnt;
    int low[maxn], dfn[maxn], times, q[maxn], head, scc_cnt, scc[maxn];
    bool inst[maxn];
    vectorG[maxn];
    void add(int u, int v)
    {
    Next[++cnt] = Laxt[u]; From[cnt] = u;
    Laxt[u] = cnt; To[cnt] = v;
    }
    void tarjan(int u)
    {
    dfn[u] = low[u] = ++times;
    q[++head] = u;
    inst[u] = 1;
    for (int i = Laxt[u]; i; i = Next[i]) {
    if (!dfn[To[i]]) {
    tarjan(To[i]);
    low[u] = min(low[u], low[To[i]]);
    } else if (inst[To[i]]) {
    low[u] = min(low[u], dfn[To[i]]);
    }
    }
    if (low[u] == dfn[u]) {
    scc_cnt++;
    while (true) {
    int x = q[head--];
    scc[x] = scc_cnt;
    inst[x] = 0;
    if (x == u) { break; }
    }
    }
    }

    本博客为本人原创,如需转载,请必须声明博客的源地址。 本人博客地址为:www.cnblogs.com/qieqiemin/ 希望所写的文章对您有帮助。
  • 相关阅读:
    CentOS 网络配置
    BUUCTF-PWN爬坑-04-pwn1_sctf_2016
    BUUCTF-PWN爬坑-03-warmup_csaw_2016
    BUUCTF-PWN爬坑-02-rip
    此博客早八百年已停止维护
    重&长剖
    FHQ Treap
    NOIP2020游记
    CSP2020 游记
    线段树套平衡树
  • 原文地址:https://www.cnblogs.com/qieqiemin/p/11704954.html
Copyright © 2011-2022 走看看