五条边按权重排好

把这五条边按 (权重, 两端编号) 从小到大排一遍。运行下面这段程序: #include <algorithm> #include <iostream> #include <queue> #include

开始练习 →

暴力枚举所有生成树

补全 brute_mst:从五条边里取出所有四条边的组合,判断它是不是一棵生成树(不成环),取总长最小的。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

拆掉一条边成本变多少

补全 without:去掉指定的一条边。分别拆掉最贵的 2-4(权重 9)和最便宜的 0-2(权重 1),各重新算一次最小总长,两个总长拼起来输出(拆最贵的在前)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

Kruskal 的做法

第 1 步:边按权重从小到大排好 第 2 步:权重 1:0-2 要 第 3 步:权重 1:3-4 要 第 4 步:权重 2:0-1 要 第 5 步:权重 3:1-3 要 第 6 步:权重 9:两端已通,跳过 0 1 3 2 4 2 1 3

开始练习 →

拿什么判断会不会成环

Kruskal 判断一条边加进去会不会成环,用的是【0】。

开始练习 →

Kruskal 什么时候可以停(C++)

Kruskal 可以提前收工的条件是【0】。

开始练习 →

并查集连了两次之后

五个点各自一块。先 unite(0, 2),再 unite(3, 4)。运行下面这段程序,看三件事:0 和 2 连通了吗、0 和 3 连通了吗、现在还剩几块: #include <algorithm> #include <

开始练习 →

复习写 find 和 unite

补全 find_root(带路径压缩)和 unite(已经在同一块里就返回 false)。做两次合并之后输出那三件事。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

写一个 Kruskal

补全 kruskal:边已经按权重排好,用 unite 的返回值决定要不要这条边。输出最小总长。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

Kruskal 按什么顺序选边

Kruskal 选边的顺序全靠排序。补全排序的比较规则(先比权重,权重相同再比两端编号),把选中的四条边按选中顺序输出(每条写成 a-b,边之间用 / 隔开)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →