并查集解决案例畅通工程

案例问题介绍:

  • 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府"畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?在我们的测试数据文件夹中有一个trffic project.txt文件,它就是诚征道路统计表,下面是对数据的解释:

解题思路:

  1. 创建一个并查集UF _Tree _Weighted(20)
  2. 分别调用union(0,1),union(6,9),union(3,8),union(5,11),union(2,12),union(6,10),union(4,8) ,示已经修建好的道路把对应的城市连接起来;
  3. 如果城市全部连接起来,那么并查集中剩余的分组数目为1 , 所有的城市都在一个树中 ,所以,只需要获取当前并查集中剩余的数目,减去1就是还需要修建的道路数目;

数据集

traffic.txt:

20
7
0 1
6 9
3 8
5 11
2 12
6 10
4 8

Python功能实现及测试

from Structure.UF.UF_Tree_Weighted import UF_Tree_Weightedwith open('../traffic.txt', 'r') as f:total = int(f.readline())uft = UF_Tree_Weighted(total)connected_nums = int(f.readline())# print(connected_nums)for i in range(connected_nums):road = f.readline().split()uft.unite(int(road[0]), int(road[1]))# print(uft.in_the_same_group(int(road[0]), int(road[1])))print(uft.num_groups)print(uft.groups)print(f"Elements number in each group: {uft.nums_in_each_group}")print(f"To make the province's traffic fluent, "f"the number of remanent roads should be connected is {uft.count_groups()-1}")

运行结果

13
[1, 1, 12, 8, 8, 11, 9, 7, 8, 9, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Elements number in each group: [0, 2, 0, 0, 0, 0, 0, 1, 3, 3, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1]
To make the province's traffic fluent, the number of remanent roads should be connected is 12

只需要调用上一节实现的路径压缩优化后的并查集即可实现

数据结构之并查集:并查集解决案例, Python——21相关推荐

  1. 基础数据结构(二):字典树、并查集、堆、哈希表、字符串的哈希方式、STL的常见容器及其接口

    文章目录 一.字典树Trie 1 原理 2 Trie字符串统计 3 [LeetCode 208. 实现 Trie (前缀树)](https://leetcode-cn.com/problems/imp ...

  2. 【数据结构与算法基础】并查集原理、封装实现及例题解析(C和java)

    前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...

  3. 数据结构(八):并查集详解 (多图+动图)

    目录 一.什么是并查集 二.并查集的存储结构 三.并查集的基本操作 (一)初始化 (二)Find操作 (三)Union操作 四.并查集的优化 (一)Union操作优化(小树并入大树) (二)Find操 ...

  4. 绿建科技加密图纸查看器安装_施工图看不懂?1.1G工程施工图纸详解,253页图文合集一查就清楚...

    施工图看不懂?1.1G工程施工图纸详解,253页图文合集一查就清楚 只要是对建筑行业,有所了解的朋友都清楚,钢筋施工图纸对于建筑物,有着举足轻重的地位!一点都不得马虎大意,接触建筑行业,第一步还是需 ...

  5. 洛谷 P1892 [BOI2003]团伙(并查集变种 反集)

    [BOI2003]团伙 题目描述 现在有 n n n 个人,他们之间有两种关系:朋友和敌人.我们知道: 一个人的朋友的朋友是朋友 一个人的敌人的敌人是朋友 现在要对这些人进行组团.两个人在一个团体内当 ...

  6. Redis数据结构、持久化、缓存技术和集群详解

    redis 是什么? 是完全开源免费的,用c语言编写的,是一个单线程,高性能的(key/value)内存数据库,基于内存运行并支持持久化的nosql数据库 能干嘛? 主要是用来做缓存,但不仅仅只能做缓 ...

  7. ELK集群+Kafka集群+FileBeat——命运多舛的安装采坑之路

    欢迎大家关注我的公众号,添加我为好友! 开始的时候感觉日志监控是比较NB的技术,感觉很神奇,那么多日志,为什么一下子就能够找到自己想要的?后来初步了解到了ELK(ElasticSearch + Log ...

  8. 服务器查看不到集群信息,集群服务器查看内存

    集群服务器查看内存 内容精选 换一换 用户可以查看在不同云服务区已经申请成功的专属云.进入指定的专属云,还可以查看该专属云内专属计算资源详情及云服务器等专属云内基础服务的实例信息.登录管理控制台.单击 ...

  9. 集运系统,集运下单系统,国际物流集运系统,转运系统源码 集运系统源码

    集运系统,集运下单系统,国际物流集运系统,转运系统源码 集运系统源码 系统简介 一.包裹管理 扫描入库 未入库包裹 已入库包裹 待认领包裹订单 已创建订单包裹 二.订单管理 全部订单 已付款 待付款 ...

最新文章

  1. Dirichlet前缀和及其拓展
  2. ORM读取web.config中的数据库连接字符串
  3. binary search完整笔记
  4. 【工具】ubuntu下在百度云文件
  5. JS运行机制(浏览器内核)
  6. 创造思维方法训练_数学思维方法训练课程:每日一题11.24
  7. 单E1光端机,V.35光端机,以太网光端机介绍及技术指标详解
  8. 字符串查找KMP算法(转)
  9. Flutter 深度学习 — 动画(补间动画、Hero动画、交错动画)
  10. Instruments工具的使用
  11. (十一)国产密码算法
  12. linux下socket编程实例
  13. 广州大学机器学习与数据挖掘实验一
  14. 奥卡姆剃刀定律(Occam‘s Razor)
  15. djay Pro 2 Mac(DJ混音软件) v2.0.11激活版
  16. shell下删除文件末尾的空行
  17. pytorch 计算 kl散度 F.kl_div()
  18. Kali中常用的代理工具以及使用
  19. windows 下使用github客户端报错:Failed to publish this branch
  20. 关于大疆御2行业进阶版(M2EA)热红外照片温度信息提取问题

热门文章

  1. C语言里最基础的关键字
  2. 版本字符串比较工具接口常用接口函数
  3. android浏览SD卡的文件,简单实现浏览Android SD卡中的文件
  4. 使用栈来完成一个表达式的结果
  5. Hive报错:Error: FUNCTION 'NUCLEUS_ASCII' already exists. (state=X0Y68,code=30000)
  6. webpack打开项目命令_webpack打包好的页面在项目中怎么运行?
  7. 求1到n ,这n个整数的二进制表示比特1的个数(时间复杂度:O(n))
  8. Linux: I/O多路转接之epoll(有图有代码有真相!!!)
  9. java中非法运算符_Java 中的运算符和流程控制相关内容的理解
  10. string类的常用函数