竞赛图的性质
竞赛图是把一个完全图的边定向后得到的有向图,所以也是一个 个点 条边的无自环重边的有向图。
竞赛图有许多优美的性质和定理,并且多半都和强连通分量有关系。
0x01 兰道定理
对于一个出度序列 ,它是合法的(存在一个竞赛图出度满足这个序列),当且仅当:
且在 时取等。注意到把以上结论中的出度换成入度也是对的。
必要性比较显然,因为前 个点内部的边已经刚好 条了。
充分性不太会证,好像是可以构造出来的。
0x02 寻找强连通分量
首先我们可以手模一下竞赛图缩点之后的结构,显然入度为 和出度为 的 scc 都只能有一个,所以这应该是一个链的结构。
可以发现,拓扑序小的 scc 里面的点的出度一定严格大于拓扑序大的 scc 里面的点的出度。
所以所有点按照出度大小从小到大排序之后,这个图的每个 scc 都是序列上的一个区间。
我们可以找到第一个 使得 ,发现这个序列上的前 个点就是原图拓扑序最大的 scc。因为首先肯定有 ,如果等于的话说明后面的点与这 个点的边都是连向这 个点的,这是前 个点组成一个强连通分量的必要条件。并且前面不存在取等的地方,说明前面绝对没有强连通分量,所以这 个点恰好组成了一个强连通分量。
简单地拓展一下可以发现,找到所有的 使得兰道定理的不等式取等,这些 就是所有强连通分量的分界点。
0x03 哈密顿通路
一个结论是:任何竞赛图都存在哈密顿通路。
我们可以尝试构造出一组解。
考虑增量构造,从空图开始加点,现在加入点 ,设前面的点形成的哈密顿通路的起点为 ,终点为 。
- 如果存在 或者 的边,则直接将 在端点处加入通路即可。
- 否则此时一定存在 和 ,那么这条通路上一定存在两个相邻的点 使得 ,在 之间插入 即可。
这样就完成了证明,并且我们找到了一个 构造哈密顿通路的算法。
0x04 哈密顿回路
一个结论是:任何强连通的竞赛图都存在哈密顿回路。
我们可以尝试构造一组解。
首先我们先找出一条这个竞赛图的哈密顿通路,不妨认为这个通路是 。
因为强连通,所以肯定存在一个点使得 。我们可以把 作为初始的回路,然后考虑增量构造。
现在加入点 ,且前 个点已经构造出了一条回路。
- 如果前 个点中存在一个 使得 。注意到 成立,所以我们一定可以找到回路上相邻的两个点 使得 。把 插入到 间即可。
- 否则前 个点中的每一个点都连向了 ,又因为强连通,后面肯定存在一个 连有到前 个点的反向边,找到这个 ,设它的反向边连向了 。设 在回路上的前一个点是 ,因为有 的边,我们可以像 这样把 这一段的点都加入回路。
这样就完成了证明,并且我们找到了一个 构造哈密顿回路的算法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下