L2-013 红色警报

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 510;

vector<int> g[N];

int main() {
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }    
    
    vector<bool> becap(n, false);
    vector<bool> havevis(n, false);
    function<void(int )> dfs = [&](int u) {
        havevis[u] = true;
        for (auto &v : g[u]) {
            if (becap[v] || havevis[v]) continue;
            dfs(v);            
        }
    };

    function<int()> count = [&]() {
        fill(havevis.begin(), havevis.end(), false);
        int cnt = 0;
        for (int i = 0; i < n; i++) {
            if (!havevis[i] && !becap[i]) {
                cnt++;
                dfs(i);
            }
        }
        return cnt;
    };

    int concnt = count();
    
    int k; cin >> k;
    for (int i = 0; i < k; i++) {
        int x;
        cin >> x;
        becap[x] = true;
        int cnt = count();
        if (cnt > concnt) {
            cout << "Red Alert: City " << x << " is lost!" << "\n";
        } else cout << "City " << x <<" is lost." << "\n";
        concnt = cnt;
    }
    if (k == n) cout << "Game Over." << "\n";

    return 0;
}
posted @ 2022-03-17 19:47  Xxaj5  阅读(30)  评论(0编辑  收藏  举报