这道题题目的意思,给出一张图上的点和边。
问如果去掉一个点,使其他点保持连通,最少需要加几条边。
这道题的实质其实就是求 除去点后的连通子集数量-1。
这道题有三种解法。论效率当然是并查集效率最高,并查集写起来麻烦。不想写。
dfs 和 bfs选了一种。dfs写起来无脑。不选。
给出bfs代码
#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
int vis[1010];
int rel[1010][1010];
int main() {
int n, m, k;
cin >> n >> m >> k;
for (int i = 0; i < m; i++)
{
int f, t;
cin >> f >> t;
rel[f][t] =rel[t][f]= 1;
}
for (int i = 0; i < k; i++)
{
int cur;
cin >> cur;
memset(vis, 0, sizeof(vis));
vis[cur] = 1;
int cnt = 0;
queue<int> q;
for (int j = 1; j <= n; j++)
{
if (!vis[j])
{
vis[j] = 1;
cnt++;
q.push(j);
w