zoukankan      html  css  js  c++  java
  • 点双连通分量模板

    //Tarjan求割点
    void tarjan(int now,int fa){
        int num=0;
        low[now]=dfn[now]=++dfnc;
        for(int i=head[now];i!=-1;i=b[i].next){
            int u=b[i].to;
            if(!dfn[u]){
                tarjan(u,now);
                low[now]=min(low[now],low[u]);
                if((fa==-1 && ++num>1) || (fa!=-1 && low[u]>=dfn[now])){  
                    cut[now]=1;
                }
            }
            else if(u!=fa){
                low[now]=min(low[now],dfn[u]);
            }
        }
    }
    
    //Tarjan求点双
    void tarjan(int now,int fa){
        low[now]=dfn[now]=++dfnc; 
        sta[++top]=now;
        for(int i=head[now];i!=-1;i=b[i].next){  
            int u=b[i].to;
            if(!dfn[u]){
                tarjan(u,now);
                low[now]=min(low[now],low[u]);
                if(dfn[now]<=low[u]){              
                    ++num;
                    while(sta[top+1]!=u){
    			int w=sta[top--];
    			dcc[num].push_back(w);
    		}
                    dcc[num].push_back(now);
                }
            }
            else if(u!=fa){
                low[now]=min(low[now],dfn[u]);
            }
        }
    }
    
    //Tarjan点双缩点(圆方树)
    void tarjan(int xx,int fa){
        dfn[xx]=low[xx]=++dfc;
        sta[++top]=xx;
        num++;
        for(int i=head[xx];i!=-1;i=b[i].next){
            int u=b[i].to;
            if(!dfn[u]){
                tarjan(u,xx);
                low[xx]=min(low[xx],low[u]);
                if(low[u]>=dfn[xx]){
                    n++;
                    ad2(xx,n),ad2(n,xx);
                    while(1){
                        int da=sta[top--];
                        ad2(da,n),ad2(n,da);
                        if(da==u) break;
                    }
                }         
            } else if(u!=fa){
                low[xx]=min(low[xx],dfn[u]);
            }
        }
    }
    
  • 相关阅读:
    服务器上往Mongo导入json文件里的数据
    在Flask蓝图中使用动态URL前缀
    python 的 optparser库
    lowB 三人组
    Linux基础介绍
    html的q标签、blockquote标签
    单冒号伪元素和双冒号伪元素
    CSS中的伪元素选择器
    CSS中的选择器
    CSS中的关系选择器
  • 原文地址:https://www.cnblogs.com/liuchanglc/p/12812899.html
Copyright © 2011-2022 走看看