题目链接
解题思路:
并查集的应用
代码如下:
#include<iostream>
using namespace std;
const int maxn=1e4;
int f[maxn];
bool v[maxn];
int x[maxn];
int y[maxn];
int find(int x)
{
if(f[x]==x)
return x;
else
{
f[x]=find(f[x]);
return f[x];
}
}
int hebing(int x,int y)
{
x=find(x);
y=find(y);
if(x!=y)
{
f[y]=x;
}
}
int main()
{
int n,m,i,j,k,xx;
int ans=0;
int sum=0;
int num=0;
cin>>n>>m;
for(i=0;i<=n;i++)
f[i]=i;
for(i=0;i<m;i++)
{
cin>>x[i]>>y[i];
hebing(x[i],y[i]);
}
for(i=0;i<n;i++)
{
if(f[i]==i)
ans++;
}
cin>>k;
while(k--)
{
cin>>xx;
v[xx]=true;
sum=0;
for(i=0;i<=n;i++)
f[i]=i;
for(i=0;i<m;i++)
{
if(v[x[i]]||v[y[i]])
continue;
hebing(x[i],y[i]);
}
for(i=0;i<n;i++)
{
if(f[i]==i)
sum++;
}
if(ans==sum||ans+1==sum)
printf("City %d is lost.\n",xx);
else
printf("Red Alert: City %d is lost!\n",xx);
ans=sum;
}
for(i=0;i<n;i++)
{
if(v[i])
num++;
}
if(num==n)
cout<<"Game Over."<<endl;
return 0;
}