CF1466H 题解-一类带权 DAG 的计数问题

简化题意可以得到这是一个 DAG 计数类的问题,直接的 DAG 计数是简单的,对于本题,区别在于对于每个 DAG 具有一个权值,为 \(\prod f(v)\),其中 \(f(v)\) 只与每个点的出度和之前的点数有关(即与在 \(a_i\) 之前的边有关)。

枚举入度为 0 的子集后对于加入的 \(T\)\(T\) 中的点只可能指向 \(S - T\),此时对于每个 \(v\in T\)可以单独确定它的出度且不会因为后面的改变所以可以考虑枚举它的出度,就变成 DAG 计数问题了。

换句话说,如果 \(f(v)\) 换成其他的函数也是可以做的,只不过要满足上文的性质。

本题 \(n\) 可以做到 \(40\) 甚至更大的原因是本题本质不同的点只有 \(O(\sqrt m)\) 甚至更少个。

换句话说,如果是普通的 DAG 计数,本质不同的点少的话应该也可以做到比子集卷积 \(O(n^2 2^n)\) 或暴力卷积 \(O(3^n)\) 更优的神秘复杂度。

code

posted @ 2024-10-11 20:35  SkyMaths  阅读(36)  评论(0)    收藏  举报