#include<functional>
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
vector<vector<int>> a(n,vector<int>(n));
for (int i = 0; i < m;++i){
int u, v;
cin >> u >> v;
a[u][v]=a[v][u]=1;
}
vector<int> vis(n);
function<void(int)> dfs = [&](int x)
{
vis[x] = 1;
for (int i = 0; i < n;++i){
if(!vis[i]&&a[x][i]){
dfs(i);
}
}
};
auto calc = [&]() -> int
{
fill(vis.begin(), vis.end(), 0);
int cnt = 0;
for (int i = 0; i < n;++i)
{
if(!vis[i])
{
dfs(i);
cnt++;
}
}
return cnt;
};
int cnt = calc();
int k;
cin >> k;
for (int i = 0; i < k;++i){
int x;
cin >> x;
for (int j = 0; j < n;++j)
a[j][x] = a[x][j] = 0;
int cur = calc();
if(cur>cnt+1)
printf("Red Alert: City %d is lost!\n", x);
else
printf("City %d is lost.\n", x);
cnt = cur;
}
if(k==n)
puts("Game Over.");
}
L2-013 红色警报 (25 分)
最新推荐文章于 2024-03-20 12:46:31 发布