2022.06.29 NOI模拟赛总结

1. 时间安排

7:30~8:00 看题面

T1:数据范围允许直接暴力预处理两两lcp,但是接下来是一个区间二分图最大匹配问题,感觉复杂度降不下来,只能暴力做。

T2:计数题,998244353已经预示这是个多项式题,可以试试 \(n^3\) dp。

T3:树上DP,爆搜估计是搜不动的,试着写一写状压dp。

8:00~9:00

不想写费用流,暴力直接打了个状压dp,答案没问题。

想了很久满二分图有什么性质或者怎么压下来二分图的边数,没有结果。

9:00~10:00

打了个状压dp,答案没问题。

先试着把图拆成一部分有k个树一部分没有树,用之前的dp值去更新,乘上组合数系数,再二项式反演回去,但是答案错了。

查了很久是哪里的问题,找不到,先写T3。

10:00~11:00

实在想不到怎么dp,打了个爆搜,果然极限数据跑不动,只能老老实实dp。

想了一会发现点与点间的状态转移不受时间的影响,至于持续时间为0的可以直接视为点权伴随转移。

打完没问题,复杂度是 \(O(n^2(t+q))\)

想了很久怎么降单次dp的复杂度,想不出来。

11:00~12:00

打了个T1的费用流骗分,然后继续查T2,一直到结束也没结果。

result:

T1: 20 T2: 20 T3: 0(细节写挂了)

2.总结

T1:

没想到居然是贪心……在二分图匹配上里正解越走越远。

可以暴力建出来反串的trie树,每次查询的时候暴力遍历trie树,这个点被当做lcp的次数即为l1-r1中结束位置在当前点的子树内的串的个数和l2-r2之间的个数取min,暴力统计即可。

正解是四维莫队,同时维护4个指针确定两个区间,把取min操作拆开,先处理l1-r1间正常加减,再处理l2-r2反过来加减即可维护出来两个值的差的绝对值,总字符数减去后就是答案的2倍。

T2:

%60分的Poly神J和DP神L。

没太懂L神的 \(O(n^2k)\) 做法,感觉很麻烦,J神的 \(O(n^2(logn+k))\) 多项式做法思路比较易懂。

首先自己犯了个很严重的错误:二项式反演是从钦定推到只有,也就是说求的方案应该是钦定K个树剩下随意,而不是钦定K个树剩下不能有树

而且应该限制钦定的K个树必须是一个森林,并不是自认为的之前求出来的答案。

然后可以求出来 \(f_{i, j}=\sum_{k=1}^{i}f_{i-k, j-1}*C^k_n*k^{(k-2)}\)

注意:n个点的图生成树个数为 \(n^{(n-2)}\) (可以用prufer序列证明)

然后可以推钦定:

\(g_{i, j}=\sum_{k=0}^{i}f_{k, j}*C^k_i*2^{C^2_{i-k}}\)

最后二项式反演即可。

三者都可以用ntt加速,需要注意的是二项式反演的卷积形式是个减法卷积,需要特殊处理。

形如 \(f_i=\sum_{j=i}^{n}g_j*h_{j-i}\),把g先翻转,做加法卷积后,把f翻转即可得到答案,证明可以用生成函数

正解是很麻烦的生成函数。

首先考虑一个式子:\(n^m=\sum_{i=0}^{m}n^{\underline i}S_{m, i}\)(S为斯特林数,可以用斯特林数组合意义证明)

题目要求 \(\sum (f(G))^k\)(G为图的形态),可以转化为求 \((f(G))^{\underline k}\) 再用上式合并。

这个式子相当于求在所有树中选出来k棵的方案数。

所以答案就是 \(T^k(x)G(x)\),其中 \(T(x)=\sum_{i>=1}\frac{i^{i-2}}{i!}x^i, G(x)=\sum_{i>=0}\frac{2^{C^2_i}}{i!}x^i\)

K只有20,暴力做k遍即可。

复杂度:\(O(nk^2+nklogn)\)(J神说可以做到严格\(O(nklogn)\)%%%)

T3:

10分的代码去掉一个循环就是30分,不过思维难度可不只一个循环。

既然做一遍DP的复杂度不好降,与其钻研怎么降,不如想怎么能只用一遍DP求答案。

这种对n个点都求一遍的降DP次数套路以前只会往换根上面想,今天L神教会了我逆向思维的思路。

思考n遍DP的必要性在于固定了起点,其他点不能作为起点出发。

但是容易发现终点是不固定的,每个点都可以成为备选的终点,并且终点态唯一,不可以进行下一步的转移,换句话说终点态是已知的。

类似概率期望DP的思路,正着不好做,但终点态已知,就倒着做。

本题同样,考虑从T时刻出发,一步步倒推回0时刻,最终每个点0时刻的dp值就是该点作为起点的答案,正确性显然。

这种正难则反的思维很重要,今天又见到一种套路。

正解是很麻烦的点分树,还没懂。

(待upd)

others:

1 . 常用图相关生成函数

n个点的树:\(F(x)=\sum_{i>=1}\frac{i^{i-2}}{i!}x^i\)

n个点的图:\(F(x)=\sum_{i>=0}\frac{2^{C^2_i}}{i!}x^i\)

n个点的连通图:\(F(x)=ln\sum_{i>=0}\frac{2^{C^2_i}}{i!}x^i\)

2 . 复合函数求导(感谢J神)

\((f(g(x)))'=\frac{df(g(x))}{dx}=\frac{df(g(x))}{dg(x)}*\frac{dg(x)}{dx}=f'(g(x))g'(x)\)(也提醒了\((f(g(x)))'!=f'(g(x))\))

posted @ 2022-06-29 15:48  Displace  阅读(135)  评论(0)    收藏  举报