zoukankan      html  css  js  c++  java
  • 12388. 图论割边

    n个顶点m条边,请求割边

    输入格式:

    第一行给定三个整数 n,m 。n 个城镇,m 条道路(双向道路)。接下来给出 m 行,每行两个正整数表示这两个城镇之间有边相连。

    输出格式:

    一个整数,有几条关键道路。

    样例 1 :

    输入:
    6 6 1 3 1 4 2 3 2 4 2 5 5 6
    输出:
    2
    说明:
    2-5和5-6是桥

     1 #include <cstdio>
     2 #include <vector>
     3 #include <cstring>
     4 
     5 
     6 using namespace std;
     7 
     8 
     9 const int max_n = 1e5 + 10;
    10 int n,m;
    11 int num[max_n],low[max_n];
    12 int time_index,a,b;
    13 vector<int> g[max_n];
    14 int ans;
    15 
    16 
    17 void dfs(int cur,int fa)
    18 {
    19     ++time_index;
    20     num[cur]=time_index;
    21     low[cur]=time_index;
    22 
    23     for(int i=0;i<g[cur].size();++i)
    24     {
    25         int v=g[cur][i];
    26         if(num[v]==0)
    27         {
    28             dfs(v,cur);
    29             low[cur]=min(low[cur],low[v]);
    30             if(low[v]>num[cur])
    31             {
    32                 ++ans;
    33             }
    34         }
    35         else if(fa!=v)
    36         {
    37             low[cur]=min(low[cur],num[v]);
    38         }
    39     }
    40 }
    41 
    42 void solve()
    43 {
    44     ans=0;
    45     time_index=0;
    46     memset(num,0,sizeof(num));
    47 
    48     dfs(1,1);
    49 
    50     printf("%d",ans);
    51 }
    52 
    53 
    54 int main()
    55 {
    56     scanf("%d %d",&n,&m);
    57     for(int i=0;i<m;++i)
    58     {
    59         scanf("%d %d",&a,&b);
    60         g[a].push_back(b);
    61         g[b].push_back(a);
    62     }
    63 
    64     solve();
    65 
    66     return 0;
    67 }
  • 相关阅读:
    YUM软件管理
    RPM软件包管理
    Linux系统启动详解
    Linux命令行文本处理工具
    Linux多命令协作:管道及重定向
    Linux网络基础配置
    网络基础
    Linux扩展权限
    Linux权限机制
    Linux用户基础
  • 原文地址:https://www.cnblogs.com/jishuren/p/12234204.html
Copyright © 2011-2022 走看看