1. 程式人生 > >A-1013 Battle Over Cities

A-1013 Battle Over Cities

一開始我也想到了是計算除掉考慮的點後,剩下圖中連通塊的個數,但是程式碼實現上還是不足,參考了《演算法筆記》的程式碼

#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;

const int maxv = 1010;
vector<int> G[maxv];
bool vis[maxv];
int current;
void DFS(int v)
{
	if(v == current)return;
	vis[v] = true;
	for
(int i=0;i<G[v].size();i++){ if(vis[G[v][i]] == false){ DFS(G[v][i]); } } } int n,m,k; int main(int argc, char const *argv[]) { scanf("%d%d%d",&n,&m,&k); int a,b; for(int i=0;i<m;i++){ scanf("%d%d",&a,&b); G[a].push_back(b); G[b].push_back(a); } for(int i=0;
i<k;i++){ scanf("%d",&current); memset(vis,false,sizeof(vis)); int block = 0; for(int i=1;i<=n;i++){ if(i != current && vis[i]==false){ DFS(i); block++; } } printf("%d\n",block-1); } return 0; }