zoukankan      html  css  js  c++  java
  • POJ 1144 Network —— (找割点)

      这是一题找无向图的割点的模板题,割点的概念什么的就不再赘述了。这里讲一下这个模板的一个注意点。

      dfs中有一个child,它不等于G[u].size()!理由如下:

      如上图,1的size是2,但是它的child是1,因为对他进行dfs时,顺序是1-2-3...然后再等到它访问它的第二个节点3时,3已经被访问过了,不能算他的child了,这是一个误区。

      代码如下:

     1 #include <stdio.h>
     2 #include <stack>
     3 #include <algorithm>
     4 #include <string.h>
     5 #include <vector>
     6 using namespace std;
     7 
     8 const int N = 100+5;
     9 
    10 stack<int> S;
    11 int scc_cnt;
    12 int dfs_clock;
    13 int dfn[N];
    14 int low[N];
    15 int iscut[N];
    16 vector<int> G[N];
    17 
    18 void dfs(int u,int fa)
    19 {
    20     dfn[u]=low[u]=++dfs_clock;
    21     int child = 0;
    22     for(int i=0;i<G[u].size();i++)
    23     {
    24         int v = G[u][i];
    25         if(!dfn[v])
    26         {
    27             child++;
    28             dfs(v,u);
    29             low[u]=min(low[u],low[v]);
    30             if(low[v]>=dfn[u]) iscut[u]=1;
    31         }
    32         else if(dfn[v]<dfn[u] && v!=fa)
    33         {
    34             low[u]=min(low[u],dfn[v]);
    35         }
    36     }
    37     if(fa == -1 && child == 1) iscut[u]=0;
    38 }
    39 
    40 int main()
    41 {
    42     int n;
    43     while(scanf("%d",&n)==1 && n)
    44     {
    45         memset(dfn,0,sizeof(dfn));
    46         memset(iscut,0,sizeof(iscut));
    47         dfs_clock=0;
    48         for(int i=1;i<=n;i++) G[i].clear();
    49         
    50         int x;
    51         while(scanf("%d",&x)==1 && x)
    52         {
    53             while(getchar() != '
    ')
    54             {
    55                 int y;
    56                 scanf("%d",&y);
    57                 G[x].push_back(y);
    58                 G[y].push_back(x);
    59             }
    60         }
    61 
    62         dfs(1,-1);
    63         int cnt=0;
    64         for(int i = 1 ;i<=n;i++) if(iscut[i]) cnt++;
    65         printf("%d
    ",cnt);
    66     }
    67     return 0;
    68 }
  • 相关阅读:
    Class.getSimpleName()的作用
    win7下制作ubuntu系统安装启动盘和U盘安装ubuntu全过程
    奈奎斯特三大准则
    [转]OFDM中保护间隔和循环前缀抵抗ISI和ICI
    频偏
    移动通信里面,OFDM技术所说的“载波相互正交”是什么意思?
    虚拟盘符映射
    npm 安装与常用命令
    ASP.NET WebAPI HTTPS
    记录下自己写的gulp打包脚本
  • 原文地址:https://www.cnblogs.com/zzyDS/p/5629021.html
Copyright © 2011-2022 走看看