LY1155 [ 20230320 CQYC省选模拟赛 T2 ] 草

题意

定义一个数列 \(a\) 是好的,满足 \(\forall i \in [0, k], a_i = \sum_{j = 0} ^ k [a_j == i]\)

对于一棵树,求出多少满足权值好的数列。

Sol

yy一下感觉好的序列不会很多。

写个 \(dfs\) 搜出 \(k \le 8\) 的所有的好的序列。

发现一个数列是好的当且仅当:

  • \(a = 1, 2, 1, 0\)
  • \(a = 2, 0, 2, 0\)
  • \(a = 2, 1, 2, 0, 0\)
  • \(a = k - 4, 2, 1, 0, ..., 1, 0, 0, 0\) (中间省略 \(k - 7\)\(0\))

证明可以自己感性理解下。

前面三个长度 \(O(1)\),直接暴力树形dp即可。

第四个数列是个经典的点分治。

注意到不好匹配的原因在于中间 \(O(n)\) 级别的 \(0\),其实可以考虑用一个并查集来跳 \(0\)

考虑对于每个权值为 \(0\) 的点,对她的父亲连一条边。

这里似乎只能写路径压缩或者按秩合并。

总复杂度 \(O(n \log ^ 2 n)\)

posted @ 2024-03-08 16:47  cxqghzj  阅读(6)  评论(0编辑  收藏  举报