zoukankan      html  css  js  c++  java
  • [学习笔记]tarjan求割点

    都口胡了tarjan求割边,就顺便口胡tarjan求割点好了QAQ

    dfn[;],low[;]的定义同tarjan求有向图强连通分量.

    枚举当前点u的所有邻接点v:

    1.如果某个邻接点v未被访问过,则访问v,并在回溯后更新low[u]=min(low[u],low[v]);

    2.如果某个邻接点v已被访问过,则更新low[u]=min(low[u],dfn[v]).

    对于当前节点u,

    如果u为搜索树中的根节点,若它的子节点数geq2(根是多棵子树上节点的唯一连通方式),则u为割点;

    如果u为搜索树上的非根节点,若存在子节点v满足low[v]$geq$dfn[u](v向上无法到达u的祖先),则u为割点.

    inline void tarjan(int u,int fa){
        dfn[u]=low[u]=++cnt;
        for(int i=g[u];i;i=e[i].nxt){
            ++t[u];
            if(!dfn[e[i].to]){
                tarjan(e[i].to,u);
                low[u]=min(low[u],low[e[i].to]);
                if(u==1){
                    if(t[u]>=2) cut[u]=true;
                }
                else if(low[e[i].to]>=dfn[x]) cut[u]=true;
            }
            else if(e[i].to!=fa)
                low[u]=min(low[u],dfn[e[i].to]);
        }
    }
  • 相关阅读:
    层模型--绝对定位(position:absolute)
    什么是层模型?
    浮动模型
    流动模型(二)
    插值方法
    CFS调度分析(内核版本:2.6.34)
    CRC检验
    ubuntu误删home目录
    随想
    Android——Activity生命周期
  • 原文地址:https://www.cnblogs.com/AireenYe/p/6049111.html
Copyright © 2011-2022 走看看