• UVA-796 Critical Links 找桥


    UVA - 796  Critical Links

    题意:找出所有的桥,按序号的字典序输出。

    就直接套模板,一开始觉得应该没有重边,而且因为这蛋疼的输入方式,重边不太好处理,但事实用几发大红wrong啪啪打脸,是真的疼

    所以还是存在重边的,加个map哈希一下对重边的建边判断一下。

     1 #include<cstdio>
     2 #include<vector>
     3 #include<map>
     4 #include<algorithm>
     5 using namespace std;
     6 const int N=1e4+11;
     7 struct Side{
     8     int id,v,ne;
     9     Side(){}
    10     Side(int v,int ne):v(v),ne(ne){}
    11     bool operator<(const Side &s1)const{
    12         return v==s1.v ? ne<s1.ne : v<s1.v;
    13     }
    14 }S[N<<1];
    15 vector<Side> vv;
    16 map<int,bool> mmp; 
    17 int n,sn,dn,head[N],dfn[N],low[N],fp[N];
    18 void init(){
    19     sn=dn=0;
    20     vv.clear();
    21     mmp.clear();
    22     for(int i=0;i<=n;i++){
    23         dfn[i]=0;
    24         fp[i]=head[i]=-1;
    25     }
    26 }
    27 void add(int u,int v,int id){
    28     S[sn].id=id;
    29     S[sn].v=v;
    30     S[sn].ne=head[u];
    31     head[u]=sn++;
    32 }
    33 void findq(int u,int fa){
    34     dfn[u]=low[u]=++dn;
    35     int v,id;
    36     for(int i=head[u];~i;i=S[i].ne){
    37         v=S[i].v;id=S[i].id;
    38         if(!dfn[v]){
    39             fp[v]=id;
    40             findq(v,u);
    41             low[u]=min(low[u],low[v]);
    42         }else if(id!=fp[u]) low[u]=min(low[u],dfn[v]);
    43     }
    44     if(fp[u]!=-1&&dfn[u]==low[u]){
    45         if(fa<u) vv.push_back(Side(fa,u));
    46         else  vv.push_back(Side(u,fa));
    47     }
    48 }
    49 int main(){
    50     int u,m,v,cnt;
    51     while(~scanf("%d",&n)){
    52         init();cnt=0;
    53         for(int i=0;i<n;i++){
    54             scanf("%d (%d)",&u,&m);
    55             while(m--){
    56                 scanf("%d",&v);
    57                 if(!mmp.count(u*N+v)){
    58                     mmp[v*N+u]=true;
    59                     add(u,v,cnt);
    60                     add(v,u,cnt);
    61                     cnt++;
    62                 }
    63             }
    64         }
    65         for(int i=0;i<n;i++) if(!dfn[i]) findq(i,i);
    66         printf("%d critical links
    ",(int)vv.size());
    67         sort(vv.begin(),vv.end());
    68         for(int i=0;i<(int)vv.size();i++) printf("%d - %d
    ",vv[i].v,vv[i].ne);
    69         printf("
    ");
    70     }
    71     return 0;
    72 }
    脸肿
  • 相关阅读:
    Spring AOP
    Spring Bean的生命周期
    MySQL中的SQL的常见优化策略
    垃圾收集器
    JWT
    Zookeeper
    RabbitMQ原理介绍
    kafka 安装配置
    kafka 简介
    ELK logstash 各种报错
  • 原文地址:https://www.cnblogs.com/LMCC1108/p/11644576.html
Copyright © 2020-2023  润新知