克鲁斯卡尔

news/2025/1/12 12:12:40/

版权声明:这就是我的文章啊

这一个算法。有点厉害。

首先,输入一个图,然后求它的最小生成树(即一条最短的链,联通N个顶点)。


                                                                         (这就是图)

好的,然后,我们首先观察这个图,发现他的答案是15.

非常的神奇。

每一个顶点在一开始都是一个独立的集合,因为他没有和任何人连边。

接着,我们将这10条边,按边权排序(这是为了可以选到最优的边)

我们开始选边了。首先,我们发现(V1,V3)这条边的边权是目前图中最小的。

况且他们两个都代表着一个独立的集合(1,3)。于是我们就可以把他们两个愉快地连边。

接着是(V4,V6)顺利的连边

接着是(V2,V5)顺利的连边

接着是(V3,V6)顺利的连边

好的现在的集合情况是1:(V1,V3,V4,V6)2:(V2,V5)

接着到(V1,V4)。

这个虽然是目前最短的,但是我们不可以将它连边。

为什么?


因为他们是同一个集合的。

为什么同一集合就不能连边呢?

因为,连了边,也是白连,(V1,V4)本来就已经是联通的了,再连一条边没有任何意义,反而会增加答案数。

于是我们舍去这条边不取。

当我们连上(V2,V3)之后,整个图就联通了。


你们可能会有个问题:怎么判断(Vx,Vy)是同一个集合的呢?

这要用到并查集。详情请看我的另一篇博客


var f:array[1..1001] of longint;
a:array[0..500001,1..3] of longint;
i,j,k,n,m,x,y,c:longint;
s:int64;
procedure qsort(l,r:longint);
var x,y,m:longint;
begin
x:=l;
y:=r;
m:=a[(l+r) div 2,3];
repeat
while a[x,3]<m do inc(x);
while a[y,3]>m do dec(y);
if x<=y then
begin
a[0]:=a[x];
a[x]:=a[y];
a[y]:=a[0];
inc(x);dec(y);
end;
until x>y;
if l<y then qsort(l,y);
if r>x then qsort(x,r);
end;
function fu(z:longint):longint;
var x,y:longint;
begin
y:=z;
while y<>f[y] do y:=f[y];
 
while z<>y do
begin
x:=f[z];
f[z]:=y;
z:=x;
end;
exit(y);
end;
begin
readln(n,m);
for i:=1 to m do
begin
readln(x,y,c);
a[i,1]:=x;
a[i,2]:=y;
a[i,3]:=c;
end;
qsort(1,m);
 
for i:=1 to n do f[i]:=i;
 
s:=0;
for i:=1 to m do
begin
j:=fu(a[i,1]);
k:=fu(a[i,2]);
if j<>k then
begin
s:=s+a[i,3];
f[j]:=k;
end;
end;
writeln(s);
end.

http://www.ppmy.cn/news/246457.html

相关文章

算法6:克鲁斯卡尔算法

目录 1. 应用场景-公交站问题2. 克鲁斯卡尔算法介绍3. 克鲁斯卡尔算法图解说明3.1 克鲁斯卡尔算法图解3.2 克鲁斯卡尔算法分析3.3 如何判断是否构成回路 4. 代码实现 1. 应用场景-公交站问题 看一个应用场景和问题&#xff1a; 某城市新增7个站点(A, B, C, D, E, F, G) &#…

Kruskal(克鲁斯卡尔)

Kruskal算法(一)之 C语言详解 Prim 在稠密图中比 Kruskal 优&#xff0c;在稀疏图中比 Kruskal 劣。 Kruskal&#xff1a;时间复杂度由排序算法决定&#xff0c;若采用快排则时间复杂度为O(N*logN) 例题 Networking #include <iostream> #include <string> #inc…

克鲁斯卡尔(Kruskal)算法

克鲁斯卡尔&#xff08;Kruskal&#xff09;算法 最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图&#xff0c;且包含原图中的所有 n 个结点&#xff0c;并且有保持图连通的最少的边。 [1] 最小生成树可以用kruskal&#xff08;克鲁斯卡尔&#xff09;算法或…

【数据竞赛】2020 Kaggle 10大竞赛方案汇总

作者: 尘沙黑夜 2020 Kaggle 10大竞赛方案汇总 1 2020kaggle精选10大赛事汇总1.1 2019 Data Science Bowl(3493只队伍)1.2 TensorFlow 2.0 Question Answering(1233只队伍)1.3 Santas Workshop Tour 2019(1620只队伍)1.4 Google QUEST Q&A Labeling(1571只队伍)1.5 O…

【数据结构与算法】克鲁斯卡尔(Kruskal)算法

一&#xff0c;应用场景 公交站问题 1&#xff09;某城市新增7个站点(A,B,C,D,E,F,G)&#xff0c;现在需要修路把7个站点连通 2&#xff09;各个站点的距离用边线表示&#xff08;权&#xff09;&#xff0c;比如 A - B距离12公里 3&#xff09;问&#xff1a;如何修路保证各…

web前端期末大作业 :HTML+CSS+JavaScript+Bootstrap实现响应式网站潮酷音乐网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

kaggle

kaggle比赛: RSNA Pneumonia Detection Challenge 【Mask-RCNN and COCO transfer learning思路以及优化】 第0部分 准备工作第1部分 导入数据第2部分 导入Mask-RCNN 模型第3部分 导入COCO 预训练权重第4部分 设置训练参数第5部分 读取训练数据集并拆分第6部分 数据增强第7部分…

贝塞尔曲线德卡斯特里奥(de Casteljau)算法

这篇文章比较好理解些~ 设P0、P02、P2是一条抛物线上顺序三个不同的点。过P0和P2点的两切线交于P1点&#xff0c;在P02点的切线交P0P1和P2P1于P01和P11&#xff0c;则如下比例成立&#xff1a; 这是所谓抛物线的三切线定理。 当P0&#xff0c;P2固定&#xff0c;引入参数t&…