|
戰(zhàn)爭(zhēng)中保持各個(gè)城市間的連通性非常重要。本題要求你編寫(xiě)一個(gè)報(bào)警程序,當(dāng)失去一個(gè)城市導(dǎo)致國(guó)家被分裂為多個(gè)無(wú)法連通的區(qū)域時(shí),就發(fā)出紅色警報(bào)。注意:若該國(guó)本來(lái)就不完全連通,是分裂的k個(gè)區(qū)域,而失去一個(gè)城市并不改變其他城市之間的連通性,則不要發(fā)出警報(bào)。 輸入格式:輸入在第一行給出兩個(gè)整數(shù) 注意:輸入保證給出的被攻占的城市編號(hào)都是合法的且無(wú)重復(fù),但并不保證給出的通路沒(méi)有重復(fù)。 輸出格式:對(duì)每個(gè)被攻占的城市,如果它會(huì)改變整個(gè)國(guó)家的連通性,則輸出 輸入樣例: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 <bits/stdc .h>
2 typedef long long LL;
3 const int INF=0x3f3f3f3f;
4 const double eps =1e-8;
5 const int mod=1e9 7;
6 const int maxn=1e5 10;
7 using namespace std;
8
9 int G[505][505];
10 int vis[505];
11 int ko[505];
12 int n;
13
14 void DFS(int u)
15 {
16 for(int i=0;i<n;i )
17 {
18 if(!ko[i]&&!vis[i]&&G[u][i])
19 {
20 vis[i]=1;
21 DFS(i);
22 }
23 }
24 }
25
26 int main()
27 {
28 #ifdef DEBUG
29 freopen("sample.txt","r",stdin);
30 #endif
31
32 int m;
33 scanf("%d %d",&n,&m);
34 for(int i=1;i<=m;i )
35 {
36 int u,v;
37 scanf("%d %d",&u,&v);
38 G[u][v]=G[v][u]=1;
39 }
40 int T;
41 scanf("%d",&T);
42 int cnt=0;
43 while(T--)
44 {
45 int k;
46 scanf("%d",&k);
47 cnt ;
48 memset(vis,0,sizeof(vis));
49 int num=0;
50 ko[k]=1; vis[k]=1;
51 for(int i=0;i<n;i )
52 {
53 if(!ko[i]&&!vis[i]&&G[k][i])
54 {
55 vis[i]=1;
56 DFS(i);
57 num ;
58 }
59 }
60 if(num<=1)
61 printf("City %d is lost.\n",k);
62 else if(num>=2)
63 printf("Red Alert: City %d is lost!\n",k);
64 if(cnt==n)
65 {
66 printf("Game Over.\n");
67 break;
68 }
69 }
70
71 return 0;
72 }- 來(lái)源:https://www./content-4-668251.html |
|
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》