补全:十万点大环的分量

一个十万个点的大环 0→1→…→99999→0。第一遍已经用手写栈写好了。补全第二遍(在反图 rg 上收点,同样用手写栈),输出分量个数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

补全:估一估能递归多少层

系统栈默认 8 MB,假设递归每层大约占 96 字节。补全估算:最多能递归多少层?(本题只是估算用的算术,真实的栈帧大小由编译器决定。) (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

补全:数一数光杆分量

还是那七个点,这次把 5 → 3 那条边加回来,于是图里有了环。 这里的 kosaraju 两遍都是手写栈,没有一层递归。补全统计:输出分量个数和其中只有一个点的分量有几个。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

缩完之后一定是什么

第 1 步:先给每个点标上分量编号 第 2 步:D、E、F 互相可达:同一组 第 3 步:同组的捏成一个点 第 4 步:剩下 5 组,组间没有环 点 组 A B C D E F G 0 1 2 3 3 3 4 把每个强连通分量捏成一个点之后

开始练习 →

缩点是为了解决什么

一张有环的有向图上,拓扑排序排不全、DAG 上的递推也没法填。缩点解决的正是【0】。

开始练习 →

缩完还剩几个点几条边

把上一节那张有环的图缩点:每个强连通分量捏成一个点,分量之间的边保留(去掉重边和自环)。 原图是七个点八条边。 运行下面这段程序: #include <algorithm> #include <climits> #i

开始练习 →

缩完之后合法顺序变少了

把上一节那张有环的图缩点:每个强连通分量捏成一个点,分量之间的边保留(去掉重边和自环)。 n01 里那张 DAG 有 4 种合法顺序。缩点之后的这张图有几种?两个数一起输出: #include <algorithm> #incl

开始练习 →

自己写:把缩点后的图建出来

把上一节那张有环的图缩点:每个强连通分量捏成一个点,分量之间的边保留(去掉重边和自环)。 comp[u] 已经算好了。建出缩点后的边集 ce,输出去重后的边数和 ce 的长度——两个数应该一样。 (本题用 g++ -std=c++17 -O

开始练习 →

自己写:缩点后最长的链

把上一节那张有环的图缩点:每个强连通分量捏成一个点,分量之间的边保留(去掉重边和自环)。 缩完是一张 DAG,可以放心求最长链了。补全 longest,输出最长的一条链经过几个分量。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

从哪几个点出发走遍全图

把上一节那张有环的图缩点:每个强连通分量捏成一个点,分量之间的边保留(去掉重边和自环)。 缩点后如果入度为 0 的分量只有一个,那个分量里的点就能走到全图;有两个或更多就谁也走不遍。输出那几个点,没有就输出 没有。 (本题用 g++ -st

开始练习 →