【模板】tarjan求割点

int dfn[maxn];
int low[maxn];
bool cut[maxn];
int tot;

void tarjan(int x)
{
    dfn[x] = low[x] = ++tot;
    int cntf = 0;
    for (Re int i = head[x]; i != -1; i = e[i].nxt)
    {
        int v = e[i].v;
        if (!dfn[v])
        {
            tarjan(v);
            low[x] = min(low[x], low[v]);
            if (low[v] >= dfn[x])
            {
                cntf++;
                if (x > 1 || cntf > 1) cut[x] = true;
            }
        }
        else low[x] = min(low[x], dfn[v]);
    }
}

 

posted on 2019-10-23 10:41  thjkhdf12  阅读(71)  评论(0)    收藏  举报