- 并查集解决最短路径
个人认为,最短路径问题大致可分为以下两种
-
畅通工程
Problem Description
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。Input
测试输入包含第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。Output
对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“-1”。看到畅通工程,我们容易想到最小生成树(一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。)问题,既保证任意两个村庄之间有道路连通就行,权最小,既成本最低。
问: 既然要使最终成本最低,根据贪心算法,那我们每次都选取成本最低的一条路,并将已选取的路径合并,最终连通所有村庄,那成本是不是最低呢?这里,我们引入并查集
并查集
并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。
我们先来看以下几个集合
集合1{A,B,C},集合2{E,F},集合3{A,E}
我们使用树结构来表示上述集合
那么要判断两个集合任两个字母a,b是否在一个集合中,只要判