2025 省选模拟 3
[SNOI2024] 树 V 图
树形DP,计数题
注意到一个合法方案,对于相同 \(f(x)\) 的点一定构成一个联通块,且对应的关键点一定在这个联通块内。
注意到 \(n\le 3000\),考虑单次 \(O(n^2)\) 的做法,树形DP暴力枚举关键点是谁,对于转移我们只关心关键点和连通块顶部的点的距离,状态多开一维记录一下即可
时间复杂度 \(O(Tn^2)\)。
[SNOI2024] 矩阵
链表,差分,数据结构,trick
lxl : 善用差分
没见过这种差分方式。
对于第一种操作考虑使用十字链表进行维护,由于更改相关位置只有 \(O(n)\) 个,可以直接旋转。但注意到一个问题,由于十字链表维护的上下左右只是一个相对位置,旋转后这个矩形内的相对位置会发生变化,所以可以给这个矩形区间加上一个旋转标记,这样就能正确找到相对位置,而区间加操作等价于第二种操作。
对于第二种操作考虑使用双向差分进行维护,具体的对于每一个位置记录他与他的上下左右的 \(\Delta\) ,这样每次需要得到一个位置的值时可以 \(O(n)\) 从一个已知位置(如边界),走过去得到所有信息。
对于上述两种操作,具体的可以先将边界和边界外围一圈的信息先得到(即所有可能会更改差分信息的位置),然后进行操作,再重新建立差分关系。
这样每次操作的时间复杂度是 \(O(n)\)。
总时间复杂度为 \(O(n(q+n))\),略卡常。
[SNOI2024] 拉丁方
构造,二分图最小边染色,trick
结论 : 二分图最小边染色数 = 点最大度数
证明
首先必要性是显然的(一个点所有边的颜色得不一样)。
考虑证明充分性。
考虑通过一组构造证明
考虑对于一条边 \(u-v\) 进行染色,找到 \(col_u=mex(U),col_v=mex(V)\)。
若 \(col_u=col_v\) 则直接连边
否则考虑增广。具体的钦定这条边的颜色为 \(col_u\),若 \(col_u\in V\) 则将与 \(v\) 相连是 \(col_u\) 的边染成 \(col_v\),然后不断增广下去,直到一个点不同时拥有 \(col_u,col_v\)。
考虑这样做一定能进行增广的正确性。
这样增广最终只会单独形成一条链,或者与 \(u\) 一起构成一个 \(col_u,col_v\) 交替的环。
由于增广是不会到达一个 \(col_u,col_v\) 交替的环,因此上面两种情况归纳了所有的情况。
对于第一种情况显然能成功进行增广。
对于第二种情况由于二分图不存在奇环,且最初 \(u\) 并没有 \(col_u\) 颜色的边,所以一定能进行增广(或者说一定有 \(col_u=col_v\))。
以上证明了增广的正确性。
回到问题,由于此构造是通过每次至多花费一个度数增加一个 \(mex\) 的颜色,而这个 \(mex\) 是不会大于 \(\max\{deg\}\),所以颜色数是不大于 \(\max\{deg\}\)。
证毕
暂存:简单图最小边染色数 = 点最大度数 + 0/1
考虑当 \(R=n\) 怎么做。
将每一行看作一个左部点,每个数看作一个右部点,每行缺什么数就将相应的行与数对应的点边。
时问题等价于构造出一组二分图最小边染色,考虑将边的颜色视作位置(第几列),对于左部点而言一个数只能占用一列,所以每个左部点的相连的边颜色应不同,对于右部点而言每个数所属列应不同,同上。
此时所有点的度数都是 \(n-C\) 所以此时一定有解。
当 \(R\not= n\) 时
先同上将矩阵补全为 \(R=n\) ,方法同上,不过此时可能有无解情况。
时间复杂度瓶颈在于求解二分图最小边染色数,单次 \(O(n^3)\),总时间复杂度为 \(O(Tn^3)\)。