zoukankan      html  css  js  c++  java
  • 【模板】无向图的割顶

    无向图的割顶:

    Vector <int> G[] :邻接表存图

    Int pre[] :存储时间戳

    Int low[] : u及其后代所能连回的最早的祖先的pre值

    Int iscut[] : =true表示是割顶,=false不是割顶

    Dfs函数在主函数调用时,fa预设为-1。

    注意初始化:

    memset(head,-1,sizeof(head));
    edge=0;
    dfs_clock=0;
    memset(low,0,sizeof(low));
    memset(pre,0,sizeof(pre));

    以下是模板 

    vector <int> G[MAXN];
    int pre[MAXN],iscut[MAXN],low[MAXN],dfs_clock;
    int dfs(int u,int fa)
    {
        int lowu=pre[u]=++dfs_clock;
        int child=0;
        for (int i=0;i<G[u].size();i++)
        {
            int v=G[u][i];
            if (!pre[v])
            {
                child++;
                int lowv=dfs(v,u);
                lowu=min(lowu,lowv);
                if (lowv>=pre[u])//如果求桥,去掉等于号
                {
                    iscut[u]=true;
                }
            }else
            if (pre[v]<pre[u] && v!=fa)
            {
                lowu=min(lowu,pre[v]);
            }
        }
        if (fa<0 && child==1) iscut[u]=0;
        return low[u]=lowu;
    }
  • 相关阅读:
    17 盒子模型
    16 input默认样式清除
    15 组合选择器
    14 CSS权重深入
    13 CSS样式权重问题
    12 子代选择器和后代选择器
    11 CSS的三种引入方式和基本选择器
    10 table标签
    NOIP1998拼数
    NOIP1998车站
  • 原文地址:https://www.cnblogs.com/zhyfzy/p/4354961.html
Copyright © 2011-2022 走看看