专栏文章

题解:AT_arc197_d [ARC197D] Ancestor Relation

AT_arc197_d题解参与者 2已保存评论 1

文章操作

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

当前评论
1 条
当前快照
1 份
快照标识符
@mipds2mu
此快照首次捕获于
2025/12/03 10:21
3 个月前
此快照最后确认于
2025/12/03 10:21
3 个月前
查看原文
si=j=1nAi,js_i = \sum_{j = 1} ^ n A_{i,j},其中 nn 为当前子树大小。每次找到除根外未被打上标记且 sis_i 最大的 ii,将其设为根的一个孩子。记 c=j=1n[Ai=Aj]c = \sum_{j = 1} ^ n [A_i = A_j]cc 的具体含义为 ii 所在的极大的链的链长。我们可以发现若 ii 能成为根的孩子,则任意的满足 Ai=AjA_i = A_jjj 都能将 ii 替掉,所以答案要乘上 cc。将与 ii 有祖先后代关系的点 jj 打上标记,如果 jj 已经被打上标记或者 AjAiA_j \subsetneq A_i,则说明答案为 00,因为一个点不可能有两个不存在祖先后代关系的祖先。然后递归进以 ii 为根的子树即可。
还有一种更简洁的做法。我们枚举 iijj,若 Ai=AjA_i = A_j,则将 ii 所在的点集 与 jj 所在的点集合并,若 Ai,j=1A_{i,j} = 1AiA_iAjA_j 之间不存在被包含关系,则答案为 00。最后答案即为每个点所在的集合大小的阶乘之积,原因同上文。将 AiA_i 由数组替换成 bitset 可以把时间复杂度从 O(n3)O(n ^ 3) 降为 O(n3ω)O(\frac{n ^ 3}{\omega})

评论

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

正在加载评论...