NOI模拟赛 5.26
赛时时间安排
是一场策略失误的比赛,大部分时间都花在T1的正解上了
7:10-7:30 读题,发现T1是虚树,决定先去码T1
7:30-9:30 因为虚树是刚刚学习的东西,然后算了算如果不建虚树的话暴力DP连子任务二都跑不过,于是先码了棵虚树上去,然后就陷入了不断修改DP式子、不断调试的过程,自闭了
9:30-10:30 感觉事情不太妙,去T2把前三档分码了,然后发现T3连一分都不会打
10:30-11:45 又想了想DP式子,依然没想出来,赶着把菊花图码了,结果有个乘法还忘取模了。。。
赛后总结反思
T1的策略问题
就算遇到相对熟悉的问题,也不应该一上来就奔着正解去,否则就会像今天这样得不偿失。
另外对于一些跑不满的暴力,有时候虽然跑满时会T,但该打还得打,例如今天单次\(O(\sum k m^3)\)的暴力可以意外收获60分。
取模问题
最近为了代码方便将加法的取模改为了函数,但也因此要格外注意一些没有用函数实现的取模是否会溢出。
另外,快速幂的底数需要考虑是否要取模。
T1 Tree
实际上是一个树上求第二类斯特林数的过程,但按照我们传统树形DP的思路,两颗子树进行合并时会非常难维护,这道题需要我们从根往下DP,为了防止DP值“散落”在各个叶子节点,需要我们将各个节点按照时间戳排成一个序列再在序列上进行类似第二类斯特林数的递推过程。DP方程为(\(len_i\)表示\(i\)的祖先个数)
\[f(i,j)=max(0,j-len_i)\cdot f(i-1,j)+f(i-1,j-1)
\]
T3 相等
一个异常神仙,且转化后DP式子变得非常不直观的数位DP。。。建议题解和标程一起食用(其实个人不建议大家订这道题)