序言
今天老师教了 最小生成树 ,教了两种算法:Prim算法 和 Kruskal算法
Prim算法想快要加堆优化又是这烦人的堆优化,但又一些题目必须用Prim算法,正常Prim算法 时间复杂度为 O ( n 2 ) O(n^2) O(n2),堆优化后是 O ( m l o g m ) O(mlog_m) O(mlogm)
Kruskal算法 十分好打,还快;实现思路是
将边的权值排序,对边进行枚举,然后加入并查集 时间复杂度为 O ( m l o g m ) O(mlog_m) O(mlogm).
我将用Kruskal 算法做最小生成树
正文
First Promble 最优布线问题
时间限制: 1000 m s 1000 ms 1000ms 空间限制: 262144 K B 262144 KB 262144KB
题目描述
学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。
当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。
现在由你负责连接这些计算机,任务是使任意两台计算机都连通(不管是直接的或间接的)。
输入
第一行为整数n ( 2 ≤ n ≤ 100 ) (2\le n\le 100) (2≤n≤100),表示计算机的数目。此后的 n n n行,每行 n n n个整数。第 x + 1 x+1 x+1行 y y y列的整数表示直接连接第 x x x台计算机和第 y y y台计算机的费用。
输出
一个整数,表示最小的连接费用。
样例输入
3 3 3
0 0 0 1 1 1 2 2 2
1 1 1 0 0 0 1 1 1
2 2 2 1 1 1 0 0 0
样例输出
2 2 2
提示
(注:表示连接 1 1 1和 2 2 2, 2 2 2和 3 3 3,费用为 2 2 2)
实现思路
这是一个模板最小生成树,自学最小生成树,我推荐这篇;