交付两种表示加遍历加并查集

这是这条路线的最终作品。把邻接表、邻接矩阵、BFS、并查集全写出来,然后一次验完五条:邻接表里阿泰有 3 个邻居;邻接矩阵是对称的,而且 1 的个数是 8;从阿岚 BFS 能到 4 个人,从北辰只能到 1 个;并查集数出来是 2 块;阿岚和

开始练习 →

十万个点为什么不用矩阵

n = 100000 的图,不用邻接矩阵存,是因为【0】。

开始练习 →

补写邻接表上的 BFS

场景:实验机上 ~/work/graph/bfs.cpp 读入一张无向图和起点,要输出起点到每个点的最少步数,但 bfs 还是空的。 任务:补全 bfs:走不到的点输出 -1。make 编译(带内存检查),./bfs < sample

开始练习 →

十万个点的连通块

场景:~/work/graph/comp.cpp 用邻接矩阵数连通块,小图没问题,可 n = 100000 时内存申请不到。 任务:把表示法换掉,让十万个点的图在 3 秒内算完。make 编译后用 sample.txt 自测。注意:chec

开始练习 →

写并查集的合并与查询

场景:~/work/graph/uf.cpp 处理「合并」和「查询是否同一块」两种指令,unite 和 same 还没写。 任务:补全这两个函数。make 编译后用 sample.txt 自测。check 会用随机的指令序列和标准答案逐条对

开始练习 →

无向边只记了一头

场景:~/work/graph/reach.cpp 回答「从 a 能不能走到 b」,边是无向的,可有些明明连着的它却说走不通。 任务:修好建图部分。make 编译后用 sample.txt 自测。 可操作范围:只在分给你的这台实验机上操作。

开始练习 →

find 太慢超时了

场景:~/work/graph/ufs.cpp 的并查集结果是对的,可点一多、连成长链以后,查询慢得跑不完。 任务:修好 find_root,让十万个点连成的长链逐点查询也能在 3 秒内完成。make 编译后用 sample.txt 自测。

开始练习 →

反复查区间和还要改值

要反复查询「某一段的和」,而且中间还会修改元素,最合适的结构是【0】。

开始练习 →

海量数据判断见没见过

几亿条记录,只要极快地判断「这条见没见过」,而且能接受极小概率的误判,用【0】。

开始练习 →

要有序且插入删除频繁

数据要一直保持有序,插入删除又很频繁、不能退化成一条链,用【0】。

开始练习 →