zoukankan      html  css  js  c++  java
  • 图的割边--仅仅与割点有一个等号的差别

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int u[1024],v[1024];
    int first[1024],Next[1024];
    int root,index=1,num[1024],low[1024];
    bool book[1024];
    int n,m;
    
    void dfs(int cur,int father)
    {
        low[cur]=num[cur]=index++;
        int k=first[cur];
        while(k!=-1){
            if(num[v[k]]==0){
                dfs(v[k],cur);
                low[cur]=min(low[v[k]],low[cur]);
                if(low[v[k]]>num[cur]){
                    book[k]=1;
                    cout<<u[k]<<"   "<<v[k]<<endl;
                }
            }
            else if(v[k]!=father){
                low[cur]=min(low[cur],num[v[k]]);
            }
            k=Next[k];
        }
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++){
            scanf("%d%d",&u[i],&v[i]);
        }
        fill(first,first+n+1,-1);
    
        for(int i=1;i<=m;i++){
            u[i+m]=v[i];
            v[i+m]=u[i];
        }
    
        for(int i=1;i<=2*m;i++){
            Next[i]=first[u[i]];
            first[u[i]]=i;
        }
    
        root = 1;
        dfs(1,root);
    
    
    }
    

       代码参考于《啊哈,算法》

  • 相关阅读:
    Linux的命令2
    运维书
    管理MariaDB
    MariaDB基础命令
    Linux创建桥接网络
    聚合网络
    kickstart
    VLAN原理
    进程优先和ACL
    计划任务at、crontab
  • 原文地址:https://www.cnblogs.com/ZGQblogs/p/9120153.html
Copyright © 2011-2022 走看看