码迷,mamicode.com
首页 > 其他好文 > 详细

【模板】无向图的割顶

时间:2015-03-21 01:04:50      阅读:143      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!