#include<iostream>
using namespace std;
struct edge
{
int start;
int end;
};
int father[1000];
edge eg[1000000];
int num;
int findFather(int a)
{
if(father[a]==a)
return a;
return father[a]=findFather(father[a]);
}
void merge(int a,int b,int k)
{
if(a==k||b==k)
return;
int a_r,b_r;
a_r=findFather(a);
b_r=findFather(b);
if(a_r==b_r)
return ;
father[a_r]=b_r;
num--;//num-- after a merge
}
int main()
{
int n,m,i,j,k;
cin>>n>>m>>k;
for(i=0;i<m;i++)
cin>>eg[i].start>>eg[i].end;
while(k--)
{
cin>>j;
num=n-2;//one city is occupied.
for(i=0;i<n;i++)//initialization
father[i]=i;
for(i=0;i<m;i++)
merge(eg[i].start-1,eg[i].end-1,j-1);
cout<<num<<endl;
}
return 0;
}
1013. Battle Over Cities @ PAT (Advanced Level) Practise
最新推荐文章于 2018-06-27 14:56:23 发布