L2-013 红色警报 (dfs判断图连通性)

L2-013 红色警报 

  战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。

输入格式:

输入在第一行给出两个整数N(0 N ≤ 500)和M≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息,即一个正整数K和随后的K个被攻占的城市的编号。

注意:输入保证给出的被攻占的城市编号都是合法的且无重复,但并不保证给出的通路没有重复。

输出格式:

对每个被攻占的城市,如果它会改变整个国家的连通性,则输出Red Alert: City k is lost!,其中k是该城市的编号;否则只输出City k is lost.即可。如果该国失去了最后一个城市,则增加一行输出Game Over.

输入样例:

5 4
0 1
1 3
3 0
0 4
5
1 2 0 4 3

输出样例:

City 1 is lost.
City 2 is lost.
Red Alert: City 0 is lost!
City 4 is lost.
City 3 is lost.
Game Over.

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<vector>
 5 #include<queue>
 6 #include<stack>
 7 #include<cmath>
 8 #include<set> 
 9 #include<algorithm>
10 using namespace std;
11 int mp[510][510];
12 int n,m;
13 int k,x,y;
14 int vis[510];
15 void dfs(int x)
16 {
17     for(int i=0;i<n;i++)
18     {
19         if(mp[x][i]==1&&vis[i]==0)
20         {
21             vis[i]=1;
22             dfs(i);
23         }
24     }
25 }
26 int count()
27 {
28     memset(vis,0,sizeof(vis));
29     int cnt=0;
30     for(int i=0;i<n;i++)
31     {
32         if(!vis[i])
33         {
34             vis[i]=1;
35             dfs(i);
36             cnt++;
37         }        
38         
39     }
40     return cnt;
41 }
42 int main()
43 {
44     scanf("%d%d",&n,&m);
45     for(int i=0;i<m;i++)
46     {
47         scanf("%d%d",&x,&y);
48         mp[x][y]=1;
49         mp[y][x]=1;
50     }
51     scanf("%d",&k);
52     int sum=count();
53     for(int j=0;j<k;j++)
54     {
55         scanf("%d",&x);
56         for(int i=0;i<n;i++)
57         {
58             mp[i][x]=0;
59             mp[x][i]=0;
60         }
61         int tmp=count();
62         if(tmp>sum+1)
63             printf("Red Alert: City %d is lost!\n",x);
64         else
65             printf("City %d is lost.\n",x);
66         sum=tmp;
67         if(j==n-1)
68             puts("Game Over.");
69     }
70 }

 

posted @ 2019-02-15 20:44  *starry*  阅读(325)  评论(0编辑  收藏  举报