从“最大化相邻连接的二进制低位相等数”推导出答案单调性,再把固定物件看成边、可粘合颜色看成点,用欧拉回路同时完成判定与构造。
前置:无向欧拉回路、Hierholzer、位运算。
若直接排列 $n$ 个链节并决定每个链节朝向,搜索空间包含排列与 $2^n$ 次翻转。真正可利用的不是“美丽值”的数值,而是阈值判定:要求每次粘合美丽值至少为 $k$,等价于粘合的两种颜色最低 $k$ 位相同。
随着 $k$ 增大,条件只会变严。因此先解决“给定 $k$ 能否构造”,再从 20 向下找第一个可行值。
有 $n\le5\times10^5$ 个链节,第 $i$ 个两端颜色为 $a_i,b_i<2^{20}$。链节可翻转,并把所有端点两两粘合成一个环。一次粘合的美丽值是 $a\oplus b$ 的二进制末尾零数(相等时为 20);最大化所有粘合中的最小值,并输出链上 $2n$ 个原端点编号顺序。
对 $k=20,19,\ldots,0$,建立 $2^k$ 个掩码点和 $n$ 条链节边。检查所有度数为偶数,再从任一非零度点运行 Hierholzer;若最终使用边数少于 $n$,说明非零度部分不连通。
可行时,把欧拉回路中的有向经过记为 from --edge i--> to。若 a_i 的掩码等于 from,输出端点 2i-1,2i;否则反向输出。这样每一对输出位置是同一链节,而前一链节的末端与后一链节的首端都代表同一欧拉顶点。回路首尾同理。
上述双向对应证明判定充要;降序枚举的首个可行 $k$ 即最优值。每轮 $O(n+2^k)$,几何级数 $\sum2^k=O(2^{20})$,总时间 $O(20n+2^{21})$,空间 $O(n+2^{20})$。
for k from 20 down to 0:
mask = 2^k - 1
for each part i:
add edge i between a[i]&mask and b[i]&mask
if every degree is even:
tour = Hierholzer from a nonzero-degree vertex
if tour uses all n edges:
orient every part by its traversal direction
output k and the corresponding endpoint pairs
stop
这一建模可推广到“固定二端物件必须全部串成一个环,接口只按等价类兼容”的问题:接口类作点、物件作边。若只需若干个环,连通性条件可删除,但答案会变成每个欧拉分量各造一环。
k=0 时只有一个掩码点,保证兜底可行。请独立证明“可行项链 $\Leftrightarrow$ 掩码图欧拉回路”,并手算一个偶度但不连通的反例。再回答:为什么从大到小枚举一定能找到最优阈值?
先只输出最优 $k$,确认判定后再恢复端点方向;卡在构造 25 分钟后只看 Hint 3。完成后用随机小数据验证输出的端点恰好使用一次、链节成对且所有粘合低位相同。