首页 > 其他 > 详细

【模板】无向图的割顶

时间:2015-03-21 01:04:24      阅读:361      评论:0      收藏:0      [点我收藏+]

无向图的割顶:

 

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

Int pre[] :存储时间戳

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

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

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

 

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;
}

 

【模板】无向图的割顶

原文:http://www.cnblogs.com/zhyfzy/p/4354961.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!