题目出处

  • 洛谷:P1536 村村通

题目描述

某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 “村村通工程” 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?

输入格式

输入包含若干组测试测试数据,每组测试数据的第一行给出两个用空格隔开的正整数,分别是城镇数目 n道路数目 m随后的 m 行对应 m 条道路,每行给出一对用空格隔开的正整数,分别是该条道路直接相连的两个城镇的编号。简单起见,城镇从 1 到 n 编号。
​       注意:两个城市间可以有多条道路相通。

数据规模

对于 100% 的数据,保证 1≤n<1000

输出格式

对于每组数据,对应一行一个整数。表示最少还需要建设的道路数目。

输入输出样例

输入样例

4 2
1 3
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0

输出样例

1
0
2
998

AC代码与思路

dfs求连通分量数量

#include <iostream>
#include <vector>using namespace std;void dfs(int Village_No, const vector<vector<int>> &G, vector<bool> &visited)
{if (visited[Village_No] == true)return;visited[Village_No] = true;for (auto i : G[Village_No]){dfs(i, G, visited);}
}int CalcToBeBuiltRoadNum(int VillageNum, const vector<vector<int>> &G, vector<bool> &visited)
{int ChildGraphNum = 0;for (int Village_i = 1; Village_i <= VillageNum; ++Village_i){if (visited[Village_i] == false){++ChildGraphNum;dfs(Village_i, G, visited);}}return ChildGraphNum - 1;
}int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int VillageNum, RoadNum;int RoadNum_tobeBulit;while (cin >> VillageNum >> RoadNum && VillageNum){vector<vector<int>> G(VillageNum + 1);vector<bool> visited(VillageNum + 1, false);int Village1, Village2;for (int i = 0; i < RoadNum; ++i){cin >> Village1 >> Village2;G[Village1].push_back(Village2);G[Village2].push_back(Village1);}cout << CalcToBeBuiltRoadNum(VillageNum, G, visited) << endl;}return 0;
}

洛谷:P1536 村村通相关推荐

  1. 洛谷P1536 村村通【并查集】

    题目链接:P1536 村村通 程序说明: n个集合需要用n - 1条线连接起来,因此合并完集合后,循环遍历所有点,记录集合的总数,减一则为正确答案 代码如下: #include <iostrea ...

  2. 洛谷—— P1536 村村通

    P1536 村村通 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一 ...

  3. 洛谷P1536 村村通

    链接:P1536 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一定 ...

  4. 洛谷P1536村村通(并查集模板题)

    问题出处: https://www.luogu.com.cn/problem/P1536 题目描述: 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府 " ...

  5. 洛谷 P1536 村村通

    做题地址:https://www.luogu.com.cn/problem/P1536 这一题也是在考察并查集,不过这一次不是考察两个顶点是否处于同一块,而是询问区间块的个数. 找到区间块的个数后,再 ...

  6. 洛谷1536 村村通

    题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连, ...

  7. 并查集——村村通(洛谷 P1536)

    题目选自洛谷P1536 并查集的变相考察类型的题目 先处理每一条存在的边,即把每条存在的边所连接的两个结点用并查集合并起来. 然后通过记录不同的代表元个数,就可以知道有多少个集合,即有多少个连通块了. ...

  8. P1536 村村通(洛谷)

    P1536 村村通 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一 ...

  9. P1536 村村通 洛谷

    https://www.luogu.org/problem/show?pid=1536 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村 ...

最新文章

  1. uniapp 中如何使用echart_uniapp中如何引用echarts
  2. 从零开始写一个迷你版的Tomcat
  3. 【408预推免复习】操作系统之处理机调度与死锁
  4. Ubuntu 必装软件及安装教程
  5. %3c故乡%3e中语言描写的作用是什么,第三单元考试题
  6. 【4】SCN-Feign远程调用
  7. allow php tag,Smarty allow_php_tag报告'未定义的属性:Smarty :: $ allow_php_tag'
  8. 应物联网要求而生 美国团队研发出零功耗红外探测器
  9. 计算机文字录入教案,《文字录入》(1-4)教案.doc
  10. python 逻辑回归 复杂抽样_如何用Python进行抽样?
  11. 如何在线查看某个地方的高程值
  12. iOS在应用中添加自定义字体
  13. gcj编译java_GCJ编译java程序的头痛问题
  14. 离散数学自反,对称,传递闭包
  15. 武汉星起航跨境电商——亚马逊日本站JCT政策将实现改革
  16. oracle pl/sqp 连接 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
  17. JAVA使用wkhtmltopdf 将Html 导出PDF
  18. Explaining Knowledge Distillation by Quantifying the Knowledge
  19. python 代码片段备忘
  20. 高级文本编辑器:UltraEdit for Mac

热门文章

  1. JQuery 选择器重点内容
  2. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)
  3. 时间序列分析中 5 个必须了解的术语和概念
  4. Python-Groupby函数应用
  5. 【Android学习之路】Kotlin语言基础
  6. Databend Cloud 入选中国信通院《云原生产品目录》
  7. 华科大考研计算机系834大纲之计算机网络(三)
  8. Proto DataStore-----JAVA
  9. Oracle数据库多重子查询嵌套的坑
  10. c语言日历时钟编程,用C语言编程,写一个日历