题目求封闭一个城市后要建造多少路其他城市才联通,就是求剩下的强连通分量的值再减1即可
用dfs寻找强连通分量,得到最后的值记住减1
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int vis[1001];
vector<int>road[1001];
int a,b,c;
void dfs(int pos)
{
vis[pos]=1;
for(int i=0;i<road[pos].size();i++)
{
if(!vis[road[pos][i]])
dfs(road[pos][i]);
}
return;
}
int main()
{
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=m;i++)
{
scanf("%d %d",&a,&b);
road[a].push_back(b);
road[b].push_back(a);
}
int sum=0;
for(int i=1;i<=k;i++)
{
sum=0;
scanf("%d",&c);
memset(vis,0,sizeof(vis));
vis[c]=1;
for(int j=1;j<=n;j++)
if(!vis[j])
{
sum++;
dfs(j);
}
printf("%d\n",sum-1);
}
}
该博客探讨了在封闭一个城市后如何计算其他城市联通所需的最小道路数,即求解强连通分量的问题。通过深度优先搜索(DFS)实现算法,对于每个未访问的城市,遍历并标记其连接的城市,最终输出强连通分量数量减1的结果。文章涉及图论中的基本概念和实际应用。
359

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



