- 邻接矩阵存储无向图
- 深度遍历统计连通分量的个数,再-1就是需要添加的边数
#include <iostream>
using namespace std;
int visited[1000];
int edgeCpy[1000][1000];
void deep(int x,int n){
visited[x]=1;
for(int i=1;i<=n;i++){
if(edgeCpy[x][i]==1&&visited[i]==0) deep(i,n);
}
return;
}
int edge[1000][1000];
int deletedCity[1000];
int main(int argc, char** argv) {
int n;
int m;
int k;
cin>>n>>m>>k;
for(int q=0;q<m;q++){
int i,j;
cin>>i>>j;
edge[i][j]=1;
edge[j][i]=1;
}
for(int i=0;i<k;i++){
int city;
cin>>city;
deletedCity[city]=1;
for(int row=1;row<=n;row++)
for(int col=1;col<=n;col++)
edgeCpy[row][col]=edge[row][col];
for(int j=1;j<=n;j++){
edgeCpy[city][j]=0;
edgeCpy[j][city]=0;
}
fill(visited,visited+n+1,0);
int componentNum=0;
for(int j=1;j<=n;j++){
if(visited[j]==1||deletedCity[j]==1) continue;
componentNum++;
deep(j,n);
}
if(componentNum>=1){
cout<<componentNum-1<<endl;
}else{
cout<<0<<endl;
}
deletedCity[city]=0;
}
return 0;
}