DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

Yet Another Hamiltonian Path Problem

返回题目

题解

如果 A1=0A_1=0A1​=0,那么顶点 111 没有任何出边。因此,如果存在哈密顿路径,顶点 111 必须是路径的最后一个顶点。

类似地,如果 AN=1A_N=1AN​=1,那么顶点 NNN 没有任何出边。因此,此时顶点 NNN 也必须是任意哈密顿路径的最后一个顶点。

所以当 A1=0A_1=0A1​=0 且 AN=1A_N=1AN​=1 时,两个不同的顶点都必须成为路径的最后一个顶点,这是不可能的,因此不存在哈密顿路径。

在其余情况下,我们总能直接构造一条哈密顿路径。

假设 AN=0A_N=0AN​=0。先将所有满足 Ai=1A_i=1Ai​=1 的顶点按编号升序输出,再将所有满足 Ai= 的顶点按编号降序输出。在第一部分中,当前顶点的值为 ,且下一个顶点的编号更大,因此所需的有向边一定存在。在第二部分中,当前顶点的值为 ,且下一个顶点的编号更小,因此所需的有向边也一定存在。如果两部分都非空,那么第一部分最后一个顶点的编号小于 ,而第二部分的第一个顶点就是 ,所以两部分之间也存在所需的有向边。

如果 AN=1A_N=1AN​=1,由于当前不是不可能的情况,因此必有 A1=1A_1=1A1​=1。此时先将所有满足 Ai= 的顶点按编号降序输出,再将所有满足 的顶点按编号升序输出。每一部分内部的边都由与上面相同的理由保证存在。如果两部分都非空,那么第一部分最后一个顶点的编号大于 ,而第二部分的第一个顶点就是 ,所以两部分之间也存在所需的有向边。

每个顶点只会被处理常数次,因此每个测试用例的时间复杂度为 O(N)O(N)O(N),总时间复杂度为 O(∑N)O(\sum N)O(∑N)。额外空间复杂度为 O(N)O(N)O(N)。

Solution written by GPT5.6

0A_i=0
Ai​=0
111
000
NNN
NNN
0A_i=0
Ai​=0
Ai=1A_i=1Ai​=1
111
111