zoukankan      html  css  js  c++  java
  • POJ1523:SPF(无向连通图求割点)

    题目:http://poj.org/problem?id=1523

    题目解析:

    注意题目输入输入,防止PE,题目就是求割点,并问割点将这个连通图分成了几个子图,算是模版题吧。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <stack>
    #include <string>
    #define N 10010
    using namespace std;
    struct node
    {
        int x,y,next;
    } eg[2*N];
    int tt,head[N],dfn[N],low[N],ti,f[N];
    void init()
    {
        memset(head,-1,sizeof(head));
        tt=0;
        ti=1;
        memset(dfn,0,sizeof(dfn));
        memset(f,0,sizeof(f));
    }
    void add(int xx,int yy)
    {
        eg[tt].x=xx;
        eg[tt].y=yy;
        eg[tt].next=head[xx];
        head[xx]=tt++;
    }
    void tarjan(int u,int fa)
    {
        dfn[u]=low[u]=ti++;
        int child=0;
        for(int i=head[u]; i!=-1; i=eg[i].next)
        {
            int v=eg[i].y;
            if(v==fa) continue;
            if(!dfn[v])
            {
                child++;
                tarjan(v,u);
                low[u]=min(low[u],low[v]);
                if(low[v]>=dfn[u]&&fa!=-1)
                {
                    f[u]++;
                }
            }
            else //无向图没有横跨边
            {
                low[u]=min(dfn[v],low[u]);
            }
        }
        if(fa<0&&child>1) f[u]=child-1;
    }
    int main()
    {
        int xx,yy,u,v,K=0,z;
        while(scanf("%d",&u)!=EOF&&u)
        {
            init();
            scanf("%d",&v);
            z=max(u,v);
            add(u,v);
            add(v,u);
            while(scanf("%d",&xx)!=EOF&&xx)
            {
                scanf("%d",&yy);
                z=max(z,max(xx,yy));
                add(xx,yy);
                add(yy,xx);
            }
            tarjan(1,-1);
            printf("Network #%d
    ",++K);
            int sum=0;
            for(int i=1; i<=z; i++)
            {
                if(f[i])
                {
                    sum++;
                    printf("  SPF node %d leaves %d subnets
    ",i,f[i]+1);
                }
            }
            if(sum==0)
                printf("  No SPF nodes
    ");
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    Hello,Cnblogs,I'm Kxia
    运维
    CRT 操作数据库乱码
    STM32 各引脚功能
    遍历结果集
    更换税控服务器主板后,重新申请注册码
    修改远程桌面端口号
    nginx 设置开机启动
    windows 日志清理批处理 设置到计划任务就可以每天清理日志了
    按关键字查找文件
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/4234635.html
Copyright © 2011-2022 走看看