2023.5.25 NOI模拟赛总结

1.时间安排

7:10~8:00

T1是个简单题,口胡了一个建图暴力向上跳祖先的做法,算下复杂度是 \(O(m^2)\),加个记忆化就是 \(O(n+m)\) 的。

T2是最优性的DP,有限制只能用 \(k\) 次操作,但是与最大子段和相关就非常难用wqs二分,部分分送了30,可能能写出来 \(n\leq5000\) 的部分分。

T3是个图论+计数,只会30分,跑路跑路。

实现了一下T1的 \(O(n^2)\),轻松过 \(n,m\leq5000\) 的部分分,加个记忆化轻松过最大的样例。

8:00~9:00

先打了T3的暴力30分网络流,因为一些shaber问题网络流调了一会。

有一个部分分是没有非关键点之间的边,感觉可以hall定理搞搞数点这种的,但是没想出来。

9:00~12:00

把T2的所有特殊性质分写了,加起来30,因为更多的shaber问题导致维护最大子段和的线段树调了非常久,注意最大子段和线段树更新 lmx 的写法是 lmx(p)=max(lmx(ls), sum(ls)+lmx(rs);,没有和0取max这种东西……

写完以后想了想大概可以二分最大值,然后所有区间和不能超过这个上界,二分的判定可以做一个 \(O(n^2)\) 的DP,记 \(f_{i,j}\) 表示前 \(i\) 个位置所有 \(1\leq l\leq r<i\) 的子区间都合法时所有以 \(i\) 结尾的后缀区间的最大值最小是多少,转移是简单的。

然后就是坐牢时间了,去准备互测的东西了。

result:

T1:100 T2:50 T3:30

2.总结

T1:

还要更小常数的转成历史版本和然后做等差数列求和的做法,不过时限1s都能跑过。

T2:

正解也是先二分,判定是 \(nlogn\) 的。

通过调整法和分类讨论可以证明每次往后增加一位,如果出现后缀最大值大于二分的限制时就不断找前面的能使得后缀最大值变得最小的位置改动直到合法,这样需要的操作次数最少。

证明略,因为题解上写的就是通过调整法和分类讨论可以证明

于是相当于有式子:\(min_{j=1}^{i}[max(-b_j+max_{k=1}^{j}suf_k), max_{k=j+1}^{i}suf_k]\),使这个式子取到最小值的 \(j\) 就是当前要修改的位置,当然前提是这个位置之前没被修改过,这个可以通过把 \(b_j\) 赋0解决。

这个式子不好用线段树上二分做,考虑变换成 \(min_{j=1}^{i}[max(-max_{k=j}^{i}b_k+max_{k=1}^{j}suf_k), max_{k=j+1}^{i}suf_k]\) ,容易证明第一个式子解出来的 \(j\) 在第二个式子同样是最优解。

于是线段树上二分即可,细节不少。

复杂度 \(O(nlognlogV)\),/jy。

T3:

[PA2021] Fiolki 2

逆天题,很难想到这题能和LGV扯上关系。

LGV引理可以计算带符号带权不交路径数量,本题的限制中也有不交,所以考虑往LGV引理上靠。

给每条边随机赋权,那么很大概率用LGV求出来的带符号带权不交路径数量不为0时存在一组不交的完美匹配。

那么先拓扑一遍求出来每个点到关键点的路径数量,这个东西可以看做一个向量,上面那句话等价于如果选出来连续的 \(k\) 个点 \([l,r]\) 并且这 \(k\) 个点的向量线性无关,那么 \(f(l,r)=k\),因为这个 \(k\times k\) 的矩阵显然行列式不为0,相反存在向量线性相关是根据行列式的求解方法这时肯定有一个向量可以被消为0向量,那么行列式就是0了。

根据上面的东西,猜测 \(f(l,r)\) 的值就是这 \(r-l+1\) 个向量的线性基大小,口胡证明考虑任意一组存在线性相关的向量组成的矩阵任意一个极大子方阵行列式都是0,任意一组两两线性无关的向量组成的矩阵考虑高消一下组成的方阵行列式非零。

那么用一个时间戳线性基维护每个基底最晚的加入时间,每次排下序就能用两两之间的差值更新答案了。

复杂度 \(O(nk^2)\)

提交记录

posted @ 2023-05-25 19:06  Displace  阅读(30)  评论(0)    收藏  举报