• POJ


    嘛,输入有点恶心....

    考虑输入完后....

    直接就是割点裸题了....

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define MAXN 10005
    using namespace std;.
    
    int n,tot,dx;
    int h[MAXN],low[MAXN],dfn[MAXN],cnt[MAXN],rt,ans;
    
    struct node{
        int from,to,next;
    }e[MAXN<<1];
    
    void init(){
        tot=dx=ans=rt=0;
        memset(h,-1,sizeof(h));
        memset(low,0,sizeof(low));
        memset(dfn,0,sizeof(dfn));
        memset(cnt,0,sizeof(cnt));
    }
    
    void add(int x,int y){
        tot++;
        e[tot].from=x;
        e[tot].to=y;
        e[tot].next=h[x];
        h[x]=tot;
    }
    
    int tarjan(int now,int fa){
        dx++;
        low[now]=dfn[now]=dx;
        for(int i=h[now];i!=(-1);i=e[i].next){
            if(!dfn[e[i].to]){
                tarjan(e[i].to,now);
                low[now]=min(low[now],low[e[i].to]);
                if(now==1)rt++;
                else if(low[e[i].to]>=dfn[now])cnt[now]=1;
            }
            else if(e[i].to!=fa){
                low[now]=min(low[now],dfn[e[i].to]);
            }
        }
    }
    
    int main(){
        while(scanf("%d",&n)==1){
            if(n==0)break;
            init();
                int x,y;
            while(scanf("%d",&x)==1&&x){
                while(getchar()!='
    '){
                    cin>>y;
                    add(x,y);
                    add(y,x);
                }
            }
            tarjan(1,1);        
            for(int i=1;i<=n;i++){
                if(cnt[i]==1)ans++;
            }        
            if(rt>1)ans++;
            cout<<ans<<endl;
        }
    }
    View Code

    码风丑请见谅....

  • 相关阅读:
    Python学习——列表
    第04组 Alpha冲刺(3/6)
    第04组 Alpha冲刺(2/6)
    第04组 Alpha冲刺(1/6)
    第04组 团队Git现场编程实战
    第04组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第4组 团队展示
    第一次结对编程作业
  • 原文地址:https://www.cnblogs.com/shatianming/p/12329006.html
Copyright © 2020-2023  润新知