91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

tarjan算法

發布時間:2020-06-11 07:53:04 來源:網絡 閱讀:732 作者:qinXpeng 欄目:編程語言
  • 強連通分量

    void tarjan(int u){
    vis[u]=true;
    LOW[u]=DFN[u]=cnt++;
    for(int v:g[u]){
        if(!DFN[v]){//沒訪問過繼續
            tarjan(v);
            LOW[u]=min(LOW[u],LOW[v]);
        }
        else if(vis[v])//還在棧中更新
        LOW[u]=min(LOW[u],DFN[v]);
    }
    ans+=DFN[u]==LOW[u];
    }
  • 縮點
    void tarjan(int u){
    vis[u]=true;
    LOW[u]=DFN[u]=cnt++;
    Q.push(u);//入棧
    for(int v:g[u]){
        if(!DFN[v]){//沒訪問過繼續
            tarjan(v);
            LOW[u]=min(LOW[u],LOW[v]);
        }
        else if(vis[v])//還在棧中更新
        LOW[u]=min(LOW[u],DFN[v]);
    }
    ans+=DFN[u]==LOW[u];
    if(DFN[u]==LOW[u]){
        int x;
        do{
            x=Q.top();
            Q.pop();
            vis[x]=0;
            num[x]=ans;
        }while(u!=x);
    }
    }
    /*
    for(int i=1;i<=n;i++){
    for(auto &v:g[i])if(G[i]!=G[v])add(i,v);
    }
    */
  • 割點
    void tarjan(int u,int fa){
    int son=0;
    LOW[u]=DFN[u]=cnt++;
    for(int v:g[u]){
        if(!DFN[v]){
            tarjan(v);
            son++;
            LOW[u]=min(LOW[u],LOW[v]);
            if(u==root&&son>1||(u!=root&&LOW[v]>=DFN[u]))ge[u]++;
        }
        else if(v^fa)
        LOW[u]=min(LOW[u],DFN[v]);
    }
    }
  • 割邊(橋)
    void tarjan(int u,int fa){
    LOW[u]=DFN[u]=cnt++;
    for(int v:g[u]){
        if(!DFN[v]){
            tarjan(v,u);
            LOW[u]=min(LOW[u],LOW[v]);
            if(LOW[v]>DFN[u]){
                bri.push_back({u,v});
            }
        }
        else if(v^fa)
        LOW[u]=min(LOW[u],DFN[v]);
    }
    }
邊的雙連通分量定義:
若一個無向圖中的去掉任意一條邊都不會改變此圖的連通性,即不存在橋,則稱作邊雙連通圖。一個無向圖中的每一個極大邊雙連通子圖稱作此無向圖的邊雙連通分量
點的雙聯通分量定義:
若一個無向圖中的去掉任意一個節點都不會改變此圖的連通性,即不存在割點,則稱作點雙連通圖。一個無向圖中的每一個極大點雙連通子圖稱作此無向圖的點雙連通分量。
  • 點雙
    void tarjan(int u,int fa){
    DFN[u] = LOW[u] = cnt++;
    int son = 0;
    for(auto &v:g[u]){
        edge e = edge(u, v);
        if(!DFN[v]){
            Q.push(e);
            tarjan(v, u);
            LOW[u] = min(LOW[u], LOW[v]);
            son++;
            if(LOW[v]>=DFN[u]){
                iscut[u] = true;//u是割點標記一下
                bcc_cut++;
                cut[bcc_cut].clear();
                while(true){
                    edge x = Q.top();
                    Q.pop();
                    if(vis_cut[x.u]!=bcc_cut){
                        cut[bcc_cut].push_back(x.u);
                        vis_cut[x.u] = bcc_cut;
                    }
                    if (vis_cut[x.v] != bcc_cut){
                        cut[bcc_cut].push_back(x.v);
                        vis_cut[x.v] = bcc_cut;
                    }
                    if(x.u^u and x.v^v)break;
                }
            }
        }else if(v^fa&&DFN[v]<DFN[u]){
            Q.push(e);
            LOW[u] = min(LOW[u], DFN[v]);
        }
    }
    if(fa<0&&son==1)iscut[u]=false;
    }
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长子县| 武胜县| 仁怀市| 息烽县| 阿拉善盟| 舞钢市| 罗甸县| 万盛区| 双流县| 恩施市| 南靖县| 柳河县| 无极县| 新平| 离岛区| 瑞丽市| 石城县| 桐庐县| 黄浦区| 乌兰浩特市| 文山县| 镇康县| 嘉善县| 布拖县| 卢湾区| 老河口市| 轮台县| 巢湖市| 黄平县| 泸西县| 怀柔区| 汽车| 青浦区| 长泰县| 芜湖市| 光山县| 江陵县| 吉安县| 辽阳市| 沙雅县| 大新县|