#include<cmath>
#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<map>
using namespace std;
/*************************
题意:给出一个无向图
求删去其中一个节点时,需要增加多少边才能使之相连
/************************
求解要点:
增加多少边实际上就是删去节点时,有多少连通分量
这里我们可以用dfs简单去做。
求联通分量个数方法:对每个点做dfs搜索,经过一个点就vis置1
搜完后,即为1个连通分量
接着对其他点进行同样dfs搜索
如果vis未被置为1,则为新的联通分量。
************************/
/***********************
笔记:
自己写代码前最好先想好特殊情况
*********************/
#define M 1005
vector<int> node[M];
int vis[M];
void dfs(int city){
int i,nextc;
for(i = 0;i < node[city].size(); i++){
nextc = node[city][i];
if(!vis[nextc]){
vis[nextc] = 1;
dfs(nextc);
}
}
}
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
int s,e;
while(m--){
scanf("%d%d",&s,&e);
node[s].push_back(e);
node[e].push_back(s);
}
int c,i,city;
int sum;
while(k--){
scanf("%d",&c);
memset(vis,0,sizeof(vis));
sum = 0;
vis[c]=1;//这个城市不能走了
for(i=1;i<=n;i++){
if(!vis[i]){ //对一个点进行dfs搜索,经过的点置1
sum++; //若这个点没被置1,说明存在一个连通分量
vis[i]=1;
dfs(i);
}
}
printf("%d\n",sum-1);
}
return 0;
}
PAT 1013. Battle Over Cities (25) 求连通分量个数
原创
©著作权归作者所有:来自51CTO博客作者breakDawn的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java实现管线拓扑关系连通性分析
本文详细介绍了Java实现管线拓扑关系连通性的方法,并给出了详细的代码示例;同时详细介绍了深度优先搜索(DFS)和广度优先搜索(BFS)的联系与区别。
Graph 搜索 深度优先搜索 Java 广度优先搜索 -
java同时处理多个数据
java同时处理多个数据的三种常用方法详解,并提供了详细的代码示例。
java 抛出异常 多线程 -
PAT_甲级_1013 Battle Over Cities (25分) (C++)【DFS+连通分量】
目录
PAT 甲级 C++ 连通分量 -
PAT 甲级 1013 Battle Over Cities
1013 Battle Over Cities (25 point(s))It is vitally important to have all the cities connected by highways in a w
PAT甲级 Battle Over Cities 1013 #include sed -
1013 Battle Over Cities (25 point(s))
1013 Battle Over Cities (25 p
PAT ci i++ #include -
1013 Battle Over Cities
题目题意:给定n个城市以及相应
ci 并查集 连通块