修好过期的堆元素

场景:~/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 第

开始练习 →

合法的顺序为什么不止一种

同一批依赖,我排出一个顺序,你排出另一个,两个都对。原因是【0】。

开始练习 →

两个顺序都合法拿什么判

批改一份拓扑排序的作业,学生给的顺序和参考答案不一样。判断他对不对,看的是【0】。

开始练习 →

合法的顺序一共有几种

七个构建任务编号 0~6,(a, b) 表示 a 做完才能做 b。 运行下面这段程序: #include <algorithm> #include <climits> #include <iostream>

开始练习 →

多一条依赖就排不全了

七个构建任务编号 0~6,(a, b) 表示 a 做完才能做 b。 再给它加上一条 5 → 3,然后两张图各排一次,各输出排出来的个数: #include <algorithm> #include <climits>

开始练习 →

自己写:数合法顺序有几种

七个构建任务编号 0~6,(a, b) 表示 a 做完才能做 b。 补全 ok:判断一个排列是不是合法的拓扑序,然后数出一共有几种。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

自己写:靠排出的个数判环

七个构建任务编号 0~6,(a, b) 表示 a 做完才能做 b。 补全 kahn 里放后继的那两步,让它返回排出来的顺序。两张图各跑一次:原图,以及加上 5 → 3 的那张,各输出排出来的个数。 (本题用 g++ -std=c++17 -

开始练习 →