1 条题解

  • 4
    @ 2024-11-17 16:33:30

    平方的组合意义是计数两个元素的有序对

    考虑对于两个路径,如果有恰好 xx 个交点,则对答案的贡献是 kn2l+1×kxk^{n-2l+1}\times k^x

    先拓扑排序,建一个源点和一个汇点,考虑 dp(x,y,a,b,c)dp(x,y,a,b,c) 表示目前两条路径分别到了 x,yx,y,长度分别是 a,ba,b,到现在有 cc 个交点,每次转移让 x,yx,y 的较小值往前走一个点,认为 m=O(n2)m=O(n^2),则复杂度 O(n3l3)O(n^3l^3)

    直接 dp 很难优化,考虑容斥,如果知道钦定了 xx 个交点,容易反演出恰好 xx 个交点的个数

    dp(x,a,b,c)dp(x,a,b,c) 表示两条路径在 xx 处相交,长度分别是 a,ba,b,到现在有 cc 个交点,转移的时候枚举下一个交点 yy 以及 xxyy 的路径长度 a,ba',b',可以转移到 dp(y,a+a,b+b,c+1)dp(y,a+a',b+b',c+1),转移系数是 cnt(x,y,a)cnt(x,y,b)cnt(x,y,a')*cnt(x,y,b'),其中 cnt(x,y,a)cnt(x,y,a) 表示 xxyy 的长度是 cc 的路径条数。

    这里 cnt 数组可以在 O(n3l)O(n^3l) 时间求出,dp 的复杂度变成了 O(n2l5)O(n^2l^5)

    考虑优化这个 l5l^5,发现转移系数里 a,ba',b' 是没有关系的,可以分两步转移,$dp(x,a,b,c)\rightarrow tmp(a+a',b)\rightarrow dp(y,a+a',b+b',c+1)$ 这样,减少一个 ll

    考虑答案怎么求,记 res(c)=dp(n+2,l+2,l+2,c)res(c)=dp(n+2,l+2,l+2,c) 即钦定了 cc 个交点的方案数,然后反演并算出答案。

    注意到这里不必要求出所有 res(c)res(c),根据反演公式 $res'(c)=\sum_{c'\ge c}res(c')(-1)^{c'-c}\binom{c'}c$,以及对答案的贡献,可以算出式子 $\sum_{c}res'(c)k^{n-2l+1}\times k^x=k^{n-2l+1}\sum_{c}res(c)(k-1)^c$,可以发现 dp 里每让 cc 那一位增加一就相当于 dp 值乘 k1k-1,于是总复杂度降到了 O(n3l+n2l3)O(n^3l+n^2l^3),注意 k=1k=1 的时候实现问题可能会求 00 的逆元,需要特判。

  • 1

信息

ID
96
时间
1500ms
内存
512MiB
难度
9
标签
递交数
259
已通过
21
上传者