zoukankan      html  css  js  c++  java
  • L2-013. 红色警报(并查集)*

    L2-013. 红色警报

    参考博客

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <cmath>
     5 #include <cstring>
     6 using namespace std;
     7 int n,m;
     8 struct node
     9 {
    10     int u,v;
    11 } e[5005];
    12 int vist[550],fa[550];
    13 int Find(int x)
    14 {
    15     return x==fa[x]?fa[x]:Find(fa[x]);
    16 }
    17 void Union(int x,int y)
    18 {
    19     int xc=Find(x);
    20     int yc=Find(y);
    21     if(xc!=yc)
    22     {
    23         fa[xc]=yc;
    24     }
    25 }
    26 int main()
    27 {
    28     int k;
    29     int u,v;
    30     while(scanf("%d%d",&n,&m)!=EOF)
    31     {
    32         for(int i=0; i<n; i++)
    33             fa[i]=i;
    34         for(int i=0; i<m; i++)
    35         {
    36             scanf("%d%d",&u,&v);
    37             e[i].u=u,e[i].v=v;
    38             Union(u,v);
    39         }
    40         int num=0,num1;
    41         for(int i=0; i<n; i++)
    42         {
    43             if(fa[i]==i)
    44             {
    45                 num++;
    46             }
    47         }
    48         memset(vist,0,sizeof(vist));
    49         scanf("%d",&k);
    50         while(k--)
    51         {
    52             num1=0;
    53             for(int i=0;i<n;i++)
    54                 fa[i]=i;
    55             int x;
    56             scanf("%d",&x);
    57             vist[x]=1;
    58             for(int i=0;i<m;i++)
    59             {
    60                 if(vist[e[i].u]==1||vist[e[i].v]==1)
    61                 continue;
    62                 else
    63                     Union(e[i].u,e[i].v);
    64             }
    65             for(int i=0;i<n;i++)
    66                 if(fa[i]==i)
    67                 num1++;
    68             if(num==num1||num+1==num1)
    69             printf("City %d is lost.
    ",x);
    70             else
    71                 printf("Red Alert: City %d is lost!
    ",x);
    72             num=num1;
    73         }
    74         num=0;
    75         for(int i=0;i<n;i++)
    76             if(vist[i]==1)
    77             num++;
    78         if(num==n)
    79             printf("Game Over.
    ");
    80     }
    81     return 0;
    82 }
  • 相关阅读:
    ThreadLocal
    贪心算法
    KMP
    多线程设计模式
    String 为什么是不可变的
    6-Ubuntu—截屏与截取选定区域
    5-Ubuntu—查看进程并关闭进程
    4-python基础—查看模块所在位置(适应于任何操作系统)
    4-Ubuntu—终端下重启与关机
    3-python基础—enumerate()
  • 原文地址:https://www.cnblogs.com/Annetree/p/8680724.html
Copyright © 2011-2022 走看看