第三步两种 MST 互相印证

补全 prim 和 same_set,在同一组边上和 Kruskal 各求一次。输出三样:Kruskal 总长 / Prim 总长 / 边集是否相同。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第四步拆掉一条边试试

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

开始练习 →

交付导航加联网一起验收

这是这条路线的最终作品。其余函数都已写好,补全 has_neg_cycle、same_set、without 三个函数,一次验完五条:① 0 到 4 的最短总长是 6,路径是 0-1-3-4;② 负权图上 Dijkstra 给 5、Bell

开始练习 →

十万个点该用哪种写法

十万个点、二十万条边的图求单源最短路,C++ 里应该用【0】。

开始练习 →

补写 Kruskal

场景:实验机上 ~/work/sp/mst.cpp 读入一张无向图,要输出最小生成树的总长(图不连通就输出 -1),可 kruskal 还没写。 任务:补全 kruskal(并查集已经写好)。make 编译,./mst < sampl

开始练习 →

十万个点的最短路

场景:~/work/sp/fast.cpp 用「每轮扫一遍找最近的点」的 O(n²) 写法求最短路。结果是对的,可十万个点时要跑很久。 任务:改写成小根堆的 Dijkstra,让十万个点、十二万条边在 3 秒内算完,输出格式不变。make

开始练习 →

修好过期的堆元素

场景:~/work/sp/stale.cpp 的 Dijkstra 结果是对的,可遇到某些图就慢得出奇:同一个点被反复弹出、反复扫它长长的邻接表。 任务:修好 dijkstra:弹出过期的那一对就跳过。make 编译后自测;check 会用

开始练习 →

修好 INF 相加溢出

场景:~/work/sp/inf.cpp 用 Bellman-Ford 求有向图(可能有负权边,没有负环)的最短路。有些走不到的点,输出的却是一个很大的负数。 任务:修好 INF 带来的溢出,走不到的点输出 -1。make 编译后用 sam

开始练习 →

负权图换成 Bellman-Ford

场景:~/work/sp/neg.cpp 对含负权边的有向图(没有负环)用了 Dijkstra,有些点的距离偏大。 任务:改用 Bellman-Ford 求最短路,输出格式不变。make 编译后用 sample.txt 自测;check 会

开始练习 →

有向图里有环指的是什么

第 1 步:节点下面是入度 第 2 步:A 入度为 0:排出来 第 3 步:它的后继入度各减 1 第 4 步:B 入度为 0:排出来 第 5 步:它的后继入度各减 1 第 6 步:C 入度为 0:排出来 第 7 步:它的后继入度各减 1 第

开始练习 →