SNOI 2024 题解(坑:D2T2)

树 V 图

相同 \(f(i)\) 的点必然构成一个连通块,不然一定无解。
每一个连通块中需要选出一个关键点,考虑相邻连通块是否合法,发现条件其实很很好判,就是两个交界点的距离需要满足某个大小关系,容易预处理后 \(O(1)\) 判,于是 \(f_{u,x}\) 表示 \(u\) 连通块内取 \(x\) 的方案数,DP 即可。
\(O(Tn^2)\)Code

矩阵

马桶套路题,维护四联通双向链表,链表的边的值是两边的差,同时需要维护对边的标号。
对于加操作,抽出边界,则权值差只在这里修改;对于旋转操作,抽出边界,然后交换连边即可。
细节巨大无敌多,\(O(nq)\)Code

拉丁方

个人认为比矩阵简单。
首先有一个想法是去填一个靠边界的长方形,假设先填下面,即把 \(R\times C\) 扩展到 \(n\times C\),然后再扩展到全部。
发现扩展的时候比较困难,尝试图论建模,建立以行号或列号为一边,颜色为另外一边的二分图,会发现问题就是要取出 \(n-R\)\(n-C\) 个将颜色全部覆盖到的匹配,这等价于二分图染色。
考虑无解,发现如果染不出来就无解,抄一个 CF600F 即可,\(O(n^3)\)Code

平方数

没听说过不会做系列。
想确定一个大数是不是平方数有如下几个做法:

  • 暴力开根号,复杂度 \(O(\log \sqrt{n})\),没有可减性,而且这个题 \(n\) 最大可达 \(10^{10^6}\) 左右,寄。
  • 随机一个质数,check 这个质因子的出现次数为偶数,然后无论如何这都要做一个 Pollard-Rho,这是 \(O(n^{1/4})\) 的,寄。
  • 这个我真没听说过,随机一个模数对于这个大数做二次剩余,随几个就是对的,而且这玩意具有可减性。

于是随便找若干个质数,使用 \(O(\sum p)\) 预处理出每一个模意义下二次剩余,状压下可能性,于是可以在 \(O(n\log n)\) 复杂度内统计答案,输出也是简单的,Code

posted @ 2024-01-24 21:40  cnyz  阅读(56)  评论(0编辑  收藏  举报