zoukankan      html  css  js  c++  java
  • kuangbin专题 专题九 连通图 Critical Links UVA

    题目链接:https://vjudge.net/problem/UVA-796

    题目:裸的求桥,按第一个元素升序输出即可。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <vector>
     5 using namespace std;
     6 #define pb push_back
     7 #define fi first
     8 #define se second
     9 
    10 const int N = (int)1e3+10;
    11 int n,tot,tim;
    12 int head[N],dfn[N],low[N];
    13 struct node{
    14     int to;
    15     int nxt;
    16 }e[N*N];
    17 vector<pair<int,int> > cut;
    18 
    19 void init(){
    20     for(int i = 0; i <= n; ++i){
    21         head[i] = -1;
    22         dfn[i] = 0;
    23     }
    24     tim = tot = 0;
    25 }
    26 
    27 inline void add(int u,int v){
    28     e[tot].to = v;
    29     e[tot].nxt = head[u];
    30     head[u] = tot++;
    31 }
    32 
    33 void tarjan(int now,int pre){
    34     dfn[now] = low[now] = ++tim;
    35     int to;
    36     for(int o = head[now]; ~o; o = e[o].nxt){
    37         to = e[o].to;
    38         if(to == pre) continue;//双向边的判断
    39         if(!dfn[to]){
    40             tarjan(to,now);
    41             low[now] = min(low[now],low[to]);
    42             //桥的条件
    43             if(dfn[now] < low[to]) cut.pb(make_pair(min(now,to),max(now,to)));
    44         }
    45         else if(low[now] > dfn[to]) low[now] = dfn[to];
    46     }
    47 }
    48 
    49 void _ans(){
    50 
    51     int ans = cut.size();
    52     sort(cut.begin(),cut.end());
    53     printf("%d critical links
    ",ans);
    54     for(int i = 0; i < ans; ++i) printf("%d - %d
    ",cut[i].fi,cut[i].se);
    55     printf("
    ");
    56     cut.clear();
    57 }
    58 
    59 int main(){
    60 
    61     int u,v,m;
    62     while(~scanf("%d",&n)){
    63         init();
    64 
    65         for(int i = 0; i < n; ++i){
    66             scanf("%d (%d)",&u,&m);
    67             for(int j = 0; j < m; ++j){
    68                 scanf("%d",&v);
    69                 add(u,v);
    70             }
    71         }
    72 
    73         for(int i = 0; i < n; ++i) if(!dfn[i]) tarjan(i,i);
    74         _ans();
    75     }
    76 
    77     return 0;
    78 }
  • 相关阅读:
    set使用
    css盒子模型详解一
    列表页调用当前栏目的子类织梦标签
    织梦如何在导航栏下拉菜单中调用当前栏目子类
    HDU1812
    BZOJ1485: [HNOI2009]有趣的数列
    组合数学学习笔记
    Full_of_Boys训练2总结
    Full_of_Boys训练1总结
    FFT算法学习笔记
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/12193389.html
Copyright © 2011-2022 走看看