L2-013. 紅色警報


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.
思路:點連通度,判斷是否為割點;每次判斷割點刪除前后變化,連通分支數增加則為割點。最近寫的題好像都有點兒暴力哎
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
int n, m;
int flag[505], vis[505], map[505][505];
void DFS(int begin)
{
    vis[begin] = 1;
    for (int i = 0; i < n; i++)
    if (vis[i] == 0 && flag[i] == 0&&map[begin][i])
        DFS(i);
}
int main()
{
    cin >> n >> m;
    for (int i = 0; i < m; i++)
    {
        int a, b; cin >> a >> b;
        map[a][b] = map[b][a] = 1;
    }
    
    int k; cin >> k;
    int s, e, sum = 0;
    memset(flag, 0, sizeof(flag));
    memset(vis, 0, sizeof(vis));
    for (int i = 0; i < n; i++)
    {
        if (flag[i] == 1 || vis[i] == 1)
            continue;
        DFS(i);
        sum++;
    }
    s = sum;
    while (k--){
        int city; cin >> city;
        flag[city] = 1;
        sum = 0;
        memset(vis, 0, sizeof(vis));
        for (int i = 0; i < n; i++)
        {
            if (flag[i] == 1 || vis[i] == 1)
                continue;
                DFS(i);
                sum++;
        }
        e = sum;
        
        if (s >= e)
            cout << "City " << city << " is lost." << endl;
        else cout << "Red Alert: City " << city << " is lost!" << endl;

        int sign = 0;
        for (int i = 0; i < n;i++)
        if (flag[i] == 1)sign++;
        if (sign == n)cout << "Game Over." << endl;
        s = e;
    }
    
    return 0;
}

 

 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



L2-013. 紅色警報(dfs) L2-013. 紅色警報 L2-013. 紅色警報 L2-013. 紅色警報 L2-013. 紅色警報 pta L2-013. 紅色警報 L2-013. 紅色警報 L2-013. 紅色警報 L2-013. 紅色警報 L2-013. 紅色警報(dfs)
 
粤ICP备14056181号  © 2014-2020 ITdaan.com