L2-013 紅色警報

纯粹的發表於2024-04-18

原題連結

題解

複雜圖論題做多了這種題不會做了
直接模擬即可,標記被摧毀的城市,然後遍歷所有城市,能一次性搜尋到的城市是一個城市群,累積有幾個城市群

code

#include<bits/stdc++.h>
using namespace std;
vector<int> G[505];
int vis[505]={0};
int des[505]={0};
void ss(int now)
{
    vis[now]=1;
    for(auto next:G[now]) if(!vis[next]&&!des[next])  ss(next);

}
int main()
{
    int n,m;
    cin>>n>>m;

    for(int i=1;i<=m;i++)
    {
        int x,y;
        cin>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }

    int cnt=0;
    for(int i=0;i<n;i++)
    {
        if(!vis[i])
        {
            ss(i);
            cnt++;
        }
    }
    int k;
    cin>>k;
    for(int i=1;i<=k;i++)
    {
        memset(vis,0,sizeof vis);
        int now;
        cin>>now;
        des[now]=1;
        int cnt1=0;
        for(int i=0;i<n;i++)
        {
            if(!vis[i]&&!des[i])
            {
                ss(i);
                cnt1++;
            }
        }
        if(cnt1>cnt) printf("Red Alert: City %d is lost!\n",now);
        else printf("City %d is lost.\n",now);
        cnt=cnt1;
    }

    if(k==n)  puts("Game Over.");
    return 0;
}

相關文章