专栏文章

题解:P14464 海底列車(collapse)

P14464题解参与者 3已保存评论 4

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
4 条
当前快照
1 份
快照标识符
@minby1np
此快照首次捕获于
2025/12/01 23:54
3 个月前
此快照最后确认于
2025/12/01 23:54
3 个月前
查看原文
为什么 T1 没人过.jpg。
结论是如果两棵树黑白染色后,黑白点度数的可重集对应相同就可以操作成功。
考虑对两棵树同时匹配,首先我们对两棵树都找到一个叶子节点 a0,b0a_0,b_0,进行函数 match(a0,b0)\text{match}(a_0,b_0)。下记 A(u),B(u)A(u),B(u) 代表树 S,TS,T 中节点 uu 的度数,以及 colxcol_x 代表到根的距离对 22 取模的值。
当进行 match(a,b)\text{match}(a,b) 的时候,如果 A(a)B(b)A(a) \ne B(b),则考虑对 aa 进行操作。遍历 11nn 的所有点,任意找到一个未匹配的点 aa' 使得 A(a)=B(b)cola=colaA(a')=B(b) \wedge col_a=col_{a'}。分类讨论:
  • aa'aa 的子树内:对 (faa,sona)(fa_a,son_{a'}) 进行操作。
  • aa' 不在 aa 的子树内:对 (a,a)(a,a') 进行操作。
这样看起来似乎就做完了,不过我们还需要讨论一个 corner case:
  • 如果 aa'aa 的子树,且 aa' 没有儿子,继续分类讨论:
    • 如果 aa 的子树外存在未匹配的点 aa'' 满足 A(a)=B(b)A(a'')=B(b)cola=colacol_a=col_{a'},选择 aa'' 即可。
    • 否则一定存在 pp 使得 A(p)=1colpcolaA(p)=1 \wedge col_p \ne col_a(faa,p)(fa_{a'},p) 进行操作,然后对 (a,p)(a,p) 进行操作。
实现非常简单,每次找到一对未匹配的儿子匹配就行,时间 O(n2)O(n^2),应该可以做到更低的复杂度,但是没必要了,代码大概 5K 左右,很好写。
Bonus:这个题有一个基于二阶毛毛虫代表元的做法,代码我写了 10K,感兴趣的读者可以写着玩玩。

评论

4 条评论,欢迎与作者交流。

正在加载评论...