失去本身就独立打城市对连通性并没有影响 因此可先判断该城市是否独立
#include<bits/stdc++.h>
using namespace std;
int fa[500];
int vis[501];
int ff[501]={0};
int lost[501]={0};
int find(int x){
while(x!=fa[x])
x=fa[x];
return x;
}
void un(int x,int y){
int fx=find(x);
int fy=find(y);
fa[fx]=fy;
}
int n,m;
void init(){
for(int i=0;i<n;i++)
fa[i]=i;
}
int fcnt(){
int cnt=0;
for(int i=0;i<n;i++){
if(ff[i]==1&&vis[i]==0&&fa[i]==i){
cnt++;
}
}
return cnt;
}
int main(){
cin>>n>>m;
vector<pair<int,int> >pa;
fill(vis,vis+500,0);
init();
for(int i=0;i<m;i++){
int x,y;
cin>>x>>y;
ff[x]=1;
ff[y]=1;
un(x,y);
pa.push_back(make_pair(x,y));
}
int k;
int temp=fcnt();
cin>>k;
int nowcity=n;
int flag=0;
for(int i=0;i<k;i++){
int x;
cin>>x;
init();
vis[x]=1;
for(int j=0;j<m;j++){
if(vis[pa[j].first]==0&&vis[pa[j].second]==0)
un(pa[j].first,pa[j].second);
}
int nowtemp=fcnt();
if(nowtemp>temp)
printf("Red Alert: City %d is lost!\n",x);
else
printf("City %d is lost.\n",x);
temp=nowtemp;
}
if(k==n)
cout<<"Game Over.";
return 0;
}