需要修补的路就是连通图数量 - 1.
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> v;
bool vis[1010];
void DFS (int s) {
if (vis[s] == true) return;
vis[s] = true;
for (int i = 0; i < v[s].size(); i++) {
int now = v[s][i];
if(vis[now] == false) DFS (now);
}
return;
}
int main() {
int n, m, k, a, b, occupy;
scanf ("%d %d %d", &n, &m, &k);
v.resize(n + 1);
for (int i = 0; i < m; i++) {
scanf ("%d %d", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
for (int i = 0; i < k; i++) {
int cnt = 0;
scanf ("%d", &occupy);
// cout << occupy << endl;
fill (vis, vis + 1010, false);
vis[occupy] = true;
for (int j = 1; j <= n; j++) {
if (j != occupy && vis[j] == false) {
DFS (j);
cnt++;
}
}
cout << cnt - 1 << endl;
}
}
该程序实现了在一个给定的图中,当某节点被占用后,计算剩余连通分量的数量。通过深度优先搜索(DFS)遍历未被占用的节点,找出连通分量,并输出其数量减一的结果。该算法在图论和计算机科学中有广泛应用。
120

被折叠的 条评论
为什么被折叠?



