• CGOS 8 备用交换机(割点)


    题目链接:http://cojs.tk/cogs/problem/problem.php?pid=8

    题意:n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间接与其它城市连接。因电子设备容易损坏,需给通讯点配备备用交换机。但备用交换机数量有限,不能全部配备,只能给部分重要城市配置。于是规定:如果某个城市由于交换机损坏,不仅本城市通讯中断,还造成其它城市通讯中断,则配备备用交换机。请你根据城市线路情况,计算需配备备用交换机的城市个数,及需配备备用交换机城市的编号。

    分析:无向图求割点。

    AC代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 const int N=100+5;
     4 struct EDGE{
     5     int v,next;
     6 }edge[N*N];
     7 int first[N],low[N],dfn[N];
     8 bool cut[N];
     9 int g,cnt,rt,son,ans;
    10 int min(int a,int b)
    11 {
    12     return a<b?a:b;
    13 }
    14 void AddEdge(int u,int v)
    15 {
    16     edge[g].v=v;
    17     edge[g].next=first[u];
    18     first[u]=g++;
    19 }
    20 void Tarjan(int u)
    21 {
    22     int i,v;
    23     low[u]=dfn[u]=++cnt;
    24     for(i=first[u];i!=-1;i=edge[i].next)
    25     {
    26         v=edge[i].v;
    27         if(!dfn[v])
    28         {
    29             Tarjan(v);
    30             if(u==rt)
    31                 son++;
    32             else
    33             {
    34                 low[u]=min(low[u],low[v]);
    35                 if(low[v]>=dfn[u]&&cut[u]==false)
    36                 {
    37                     ans++;
    38                     cut[u]=true;
    39                 }
    40             }
    41         }
    42         else
    43             low[u]=min(low[u],dfn[v]);
    44     }
    45 }
    46 int main()
    47 {
    48     freopen("gd.in","r",stdin);
    49     freopen("gd.out","w",stdout);
    50     int n,u,v,i;
    51     scanf("%d",&n);
    52     memset(first,-1,sizeof(first));
    53     memset(low,0,sizeof(low));
    54     memset(dfn,0,sizeof(dfn));
    55     memset(cut,false,sizeof(cut));
    56     g=cnt=ans=0;
    57     while(scanf("%d%d",&u,&v)!=EOF)
    58     {
    59         AddEdge(u,v);
    60         AddEdge(v,u);
    61     }
    62     for(i=1;i<=n;i++)
    63     {
    64         if(!dfn[i])
    65         {
    66             rt=i;
    67             son=0;
    68             Tarjan(i);
    69             if(son>1&&cut[i]==false)
    70             {
    71                 cut[i]=true;
    72                 ans++;
    73             }
    74         }
    75     }
    76     printf("%d
    ",ans);
    77     for(i=1;i<=n;i++)
    78         if(cut[i])
    79             printf("%d
    ",i);
    80     return 0;
    81 }
    View Code
  • 相关阅读:
    前端性能优化--图片处理(Css Sprites 与 base64)
    CSS规范--春风十里不如写好CSS
    前端性能优化--图片懒加载(lazyload image)
    struts2不同版本在核心filter在web.xml中的配置
    Web.xml配置详解之context-param
    web.xml的加载过程是context-param >> listener >> fileter >> servlet
    web.xml中Listener的作用
    web.xml中Filter的作用
    字符串反转
    fastjson是什么东东?
  • 原文地址:https://www.cnblogs.com/frog112111/p/3337647.html
Copyright © 2020-2023  润新知