CodeForces

Problem D – Codeforces Round #127 (Div. 1)

多模式串匹配,是不是又是AC自动机啊?

显然,每个文本串中,模式串的排列构成的子序列的逆序对数量只和模式串有关。所以我们可以对模式串建立Trie树,每扫入一个文本串的单词就进行匹配。可以做到O(K)\mathrm{O}(K),K为文本串总长(虽然单个字符串的长度极小可以O(NK)暴跳\mathrm{O}(NK)暴跳)。这样就构建出一个由11nn构建的数列。

枚举15!15!的全排列然后暴搜显然不可行。我们注意到,如果钦定一个数xx,只要知晓当前的排列中前jj位分别是哪些数,就可以立刻算出xx加入排列后新增的逆序对数量。则我们考虑状压DP。 (更多…)

More
  • 2021年10月12日

(2022.11.21 重写)

定义

siz(x)\newcommand\siz{\operatorname{siz}}\newcommand\hson{\operatorname{hson}}\siz(x) 表示 xx 的子树大小(含 xx),hson(x)\hson(x) 表示 xx重儿子。将边 (x,hson(x))(x,\hson(x)) 称为一条重边,其余不满足该条件的边称为轻边;将相邻的重边两两相连形成的链称为重链。

命题

一棵以 rt\newcommand\rt{\text{rt}}\rt 为根的树,其重心 cc 满足以下条件:

  • cc 在以 rt\rt 为顶的重链上;(1)(1)
  • cc 的所有祖先(记其中一个为 xx),均满足 siz(hson(x))>siz(rt)2\siz(\hson(x))>\frac{\siz(rt)}{2}(2)(2)
  • siz(hson(c))siz(rt)2\siz(\hson(c))\leq \frac{\siz(rt)}{2}(3)(3)

(更多…)

More
  • 2021年7月23日