zoukankan      html  css  js  c++  java
  • Uva 315 Network 判断割点

    模板题,注意输出

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <math.h>
    #include <vector>
    #include <stack>
    using namespace std;
    typedef long long LL;
    const int N = 1e2+5;
    int head[N],tot,n;
    struct Edge{
       int v,next;
    }edge[N*N];
    bool iscut[N];
    void add(int u,int v){
       edge[tot].v=v;
       edge[tot].next=head[u];
       head[u]=tot++;
    }
    int dfn[N],low[N],clk;
    void targin(int u,int f){
       dfn[u]=low[u]=++clk;
       int child=0;
       for(int i=head[u];~i;i=edge[i].next){
           int v=edge[i].v;
           if(v==f)continue;
           if(!dfn[v]){
             ++child;
             targin(v,u);
             low[u]=min(low[u],low[v]);
             if(f!=-1&&low[v]>=dfn[u])iscut[u]=true;
           }
           else if(dfn[v]<low[u])low[u]=dfn[v];
       }
       if(f==-1&&child>1)iscut[u]=true;
    }
    int main(){
        while(~scanf("%d",&n),n){
          memset(head,-1,sizeof(head));clk=tot=0;
          for(int u;;){
            scanf("%d",&u);
            if(!u)break;
            for(int v;;){
              scanf("%d",&v);
              add(u,v);
              add(v,u);
              char c=getchar(); 
              if(c=='
    ')break;
             
            }
          }
          memset(iscut,false,sizeof(iscut));
          memset(dfn,0,sizeof(dfn));
          memset(low,0,sizeof(low));
          for(int i=1;i<=n;++i)
           if(!dfn[i])targin(i,-1);
          int ans=0;
          for(int i=1;i<=n;++i)
           if(iscut[i])++ans;
           printf("%d
    ",ans);  
        }
        return 0;
    }
    View Code
  • 相关阅读:
    查询内容在网页里面分页显示+跳页查看
    struts2——通配符
    JavaScript 输出
    oracl函数
    oracle基本用法
    Java之线程处理之二
    java之多线程之一/序列化和反序列化
    错题整理之二
    S2结业考试的第一次测验
    cookie与session的爱恨情仇
  • 原文地址:https://www.cnblogs.com/shuguangzw/p/5487887.html
Copyright © 2011-2022 走看看