第二遍忘了换反图会怎样

还是那七个点,这次把 5 → 3 那条边加回来,于是图里有了环。 补上选图那一行:second_reversed 为真走反图 rg,为假就是写错的那一版(第二遍还走原图 g)。两版各跑一次,输出各自的分量个数。 (本题用 g++ -std=

开始练习 →

列出互相都走得到的点对

还是那七个点,这次把 5 → 3 那条边加回来,于是图里有了环。 comp[u] 是 u 所在分量的编号。列出所有互相都走得到的点对。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

两条路算分量数要对上

还是那七个点,这次把 5 → 3 那条边加回来,于是图里有了环。 上面用的是 Kosaraju。再用笨办法数一遍:每一对点正反各跑一次可达性,互相到得了的归成一组。两个数输出出来对账。 (本题用 g++ -std=c++17 -O0 编译。

开始练习 →

递归 Tarjan 最怕什么图

第 1 步:系统栈:一共就这么几格 第 2 步:递归到第 1 层 第 3 步:递归到第 4 层 第 4 步:递归到第 8 层 第 5 步:再深一层:段错误 第 6 步:手写栈放在堆上,不占这里 f1 f2 f3 f4 f5 f6 f7 f8

开始练习 →

递归深度最多是多少

在一张有 n 个点的图上做递归 DFS,递归深度最多可以达到【0】。

开始练习 →

改成手写栈要存什么

把递归 DFS 改成用 vector 手写的栈,栈里每一格至少要存【0】。

开始练习 →

递归 Tarjan 数出几个分量

还是那七个点,这次把 5 → 3 那条边加回来,于是图里有了环。 运行下面这段程序: #include <algorithm> #include <climits> #include <iostream>

开始练习 →

手写栈最深压了几格

一条有 100000 个点的链 0→1→2→…,用 vector 手写栈做 DFS,记下栈最多同时有几格: #include <algorithm> #include <climits> #include <i

开始练习 →

补全:low 的两种更新

还是那七个点,这次把 5 → 3 那条边加回来,于是图里有了环。 补全 tarjan 里 low 的两种更新:孩子递归回来要用孩子的 low,碰到栈里的点要用它的 dfn。输出分量个数和最大分量的大小。 (本题用 g++ -std=c++1

开始练习 →

补全:手写栈的出栈时机

一条有 100000 个点的链 0→1→2→…,用手写栈做 DFS,按「完成」的先后记下 order。补全出栈那一段,输出第一个完成的点和一共完成了几个。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →