zoukankan      html  css  js  c++  java
  • poj 1523 SPF 无向图关节点

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    const int N=1000+5;
    int g[N][N],vis[N],low[N],dfn[N],sub[N],dep,n,son;
    
    void dfs(int u)
    {
        for(int v=1;v<=n;v++)
        {
            if(g[u][v])
            {
                if(!vis[v])
                {
                    vis[v]=1;
                    dep++;
                    dfn[v]=low[v]=dep;
                    dfs(v);
                    low[u]=min(low[u],low[v]);
                    if(low[v]>=dfn[u])
                    {
                        if(u==1) son++;
                        else sub[u]++;
                    }
                }
                else
                  low[u]=min(low[u],dfn[v]);
            }
        }
    }
    
    int main()
    {
        int i,j,u,v,flag,cas=0;
        while(~scanf("%d",&u))
        {
            n=0;
            n=max(n,u);
            if(u==0) break;
            memset(g,0,sizeof(g));
            scanf("%d",&v);
            n=max(n,v);
            g[u][v]=g[v][u]=1;
            while(~scanf("%d",&u))
            {
                if(u==0) break;
                n=max(n,u);
                scanf("%d",&v);
                n=max(n,v);
                g[u][v]=g[v][u]=1;
            }
            memset(vis,0,sizeof(vis));
            memset(sub,0,sizeof(sub));
            dep=1;
            son=0;
            dfn[1]=low[1]=vis[1]=1;
            dfs(1);
            if(son>1) sub[1]=son-1;
            flag=0;
            if(cas>0) printf("
    ");
            printf("Network #%d
    ",++cas);
            for(i=1;i<=n;i++)
            {
                //printf("%d
    ",sub[i]);
                if(sub[i])
                {
                    flag=1;
                    printf("  SPF node %d leaves %d subnets
    ",i,sub[i]+1);
                }
            }
            if(!flag)
                printf("  No SPF nodes
    ");
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    【坑】提答题
    Google Code Jam 2014 Round2
    湖北省队互测Week1
    [xyz模拟题]动态维护树的直径
    音乐会的等待【单调栈】
    51nod1202【DP-树状数组维护】
    51nod1113【矩阵快速幂】
    51nod1255【贪心-栈的应用】
    Lightoj1059【最小生成树】
    SPOJ IAPCR2F 【并查集】
  • 原文地址:https://www.cnblogs.com/xryz/p/4847793.html
Copyright © 2011-2022 走看看