閱讀195 返回首頁    go 阿裏雲 go 技術社區[雲棲]


poj 1144 Network 關節點

Tarjan練手題,WA了兩次,處理回邊誤把low[u]=min(low[u],dph[v]); 寫成low[u]=min(low[u],low[v]);了,還要注意節點數小於2時輸出0

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
using namespace std;
int n,ans;
vector<int> node[101];
int dph[101],low[101],vis[101];
void dfs(int v,int d)
{
    dph[v]=low[v]=d;
    vis[v]=1;
    int u,ok=0;
    for(int i=0;i<node[v].size();i++)
    {
        u=node[v][i];
        if(vis[u])
        {
            low[v]=min(low[v],dph[u]);
        }
        else
        {
            dfs(u,d+1);
            if(low[u]>=dph[v])ok++;
            low[v]=min(low[v],low[u]);
        }
    }
    if(v!=1)ok++;
    if(ok>1)ans++;
}
int main()
{
    while(~scanf("%d",&n)&&n)
    {
        int v,u,i;
        for(i=1;i<=n;i++)node[i].clear();
        while(scanf("%d",&v)&&v)
        {
            while(getchar()!='\n')
            {
                scanf("%d",&u);
                node[v].push_back(u);
                node[u].push_back(v);
            }
        }
        ans=0;
        memset(vis,0,sizeof(vis));
        dfs(1,0);
        printf("%d\n",ans);
    }
}


最後更新:2017-04-03 16:48:59

  上一篇:go Linux-0.0.1內核閱讀連載筆記-2013.08.20
  下一篇:go tomcat7 - cacti 備忘