2025-01-09 省选模拟赛记录

posted on 2025-01-10 02:05:09 | under | source

过程

先开 T1,感觉可以 wqs 二分然后假了,之后发现可以暴力状压,然后状态有点模糊,遂弃之。T3 吴成蛋说他会了,然后被我 hack 了哈哈哈。T2 怎么一堆人会啊?(他们之前做过),想了想线段树合并做法,还需可持久化,没时间写了。遗憾离场。

T1 MST

原。

题意:给出一个无向连通图,每条边有两种边权 \(a_i,b_i\),对于每个 \(k\),求出恰选择 \(k\)\(a\) 边权时,MST 权值最大值。\(n\le 9,m\le 100\)

  • 官方做法:考虑刻画 kruskal 的过程,暴力地维护连通性状态是 \(Bell(9)\) 的,可以接受。需要处理两种边权,可以拆边,具体来说,假如 \(a\le b\),拆为 \((a,1),(b,0)\),反之 \((b,-1),(a,0)\)。然后一开始先让 \(a\) 的数量默认为 \(a>b\) 的数量。排序优先将 \(0\) 放在后面,处理非 \(0\) 边时选不选都行,对于 \(0\) 边,不难发现不会影响答案,只需在另一条边没选时强制选即可(判定为两边不连通)。因为对 \(a\) 的影响已被计算、而又不会影响 mst 的权值。可能会疑惑:假如连通但实际上没选怎么办?手模发现也没有影响哦。复杂度 \(O(m^2Bell(n))\)
  • 暴力状压:记 \(f_{S,i,j}\) 表示考虑 \(S\) 这个子集,有 \(i\)\(A\) 边,其树边最大为 \(j\)(即在 \(j\) 时刻该连通块形成)时,MST 最大权值。转移考虑合并 \(S,T\),先预处理中间的边最小值为 \(k\) 时,\(a\) 边的数量区间,然后暴力转移用单调队列优化即可。\(O(m^33^n)\)

T2 walk

原。

题意:给出一棵树,每个点有一个指向相邻点的指针,每访问到一个点时,先按序旋转指针一步,然后走向指向的点。求从 \(1\) 出发走 \(k\) 步最终到达哪个点,多组询问。\(n\le 10^6,q\le 10^6,k\le 10^{15}\)

神仙思维 DS 题。

不妨以 \(1\) 为根。首先必然有循环节,你发现当每个点都指向其父亲时,一次游走(从 \(1\) 出发再回来)即为欧拉序。这启示我们以是否指向父亲区分点,称之好点或坏点,特殊的,\(1\) 是好点。

考察一个点的状态变化。不难发现,假如是好点,那么就会按欧拉序遍历儿子,然后返回到父亲,仍是好点;假如是坏点,那么就会从某个儿子(即初始指向的点的下一个)开始按序遍历,然后返回到父亲,此时变为好点。

考虑处理从坏点变为好点的过程,注意到坏点遍历它儿子的顺序其实是欧拉序的一段后缀,所以总遍历顺序是欧拉序的子序列。拍平在欧拉序上刻画该过程。

从欧拉序起点即 \(1\) 开始遍历,假如当前点是好点那么按欧拉序即访问下一位即可;假如是坏点,那么跳到那个儿子的位置继续遍历,并将自己设置为好点。一直做下去直到没有坏点,则可以通过循环节处理。

可以用并查集加速跳过好点的过程,暴力修改坏点显然均摊正确。询问离线下来排序,每次处理对应时间区间的询问即可。复杂度 \(O(n\alpha(n)+q\log q)\)你可以基数排序线性。

T3 permutation

题意:给出排列 \(p\),将逆序对连边得到无向图,边权为 \(1\),对每个点求出以其为起点到其他点的最短路距离之和。\(n\le 2\times 10^5\)

先考虑连通性,显然假如某个前缀 \(1\dots x\) 满足值域也恰为 \(1\dots x\),那么不会和 \([x+1,n]\) 有边。以此为分界线划分序列,则每个区间连通。证明考虑最大值 \(mx\),那么由于该序列是不可划分的,所以去掉 \(mx\) 将两边合并后,其第一个划分区间必然跨过了 \(mx\),所以左边至少与右边一个区间连通,加入最大值后会将右边所有区间连通,所以原序列连通。

然后转到坐标系上 \((i,p_i)\),考虑从某个点出发走 \(< k\) 步可以到达的点,发现一定是左上角、右下角两个矩阵交错在一起。不好做,故考虑无法到达的点,即为左下右上两个矩阵。两个的贡献独立,考虑左下,用 \(x,y\) 刻画其边界,拓展一步,则边界变为 \(ls_y\)\(rs_x\)。其中 \(ls_i\) 指在 \(i\) 左上角横坐标最小的点、\(rs_i\) 指右下角纵坐标最小的点。

由于 \(\sum dis(x,i)=\sum\limits_{j=1}\sum\limits_i [dis(x,i)\ge j]\),所以等价于从 \((x,x)\) 开始,先统计矩阵内点的数量,然后变为 \((ls_y,rs_x)\),直到没有点。

不妨 \((x,y)\to (ls_y,rs_x)\) 连边,构成内向树,由神秘结论树的点数是 \(O(n\sqrt n)\) 的,于是建出树后,统计每个点的贡献即可。

posted @ 2026-01-13 11:41  Zwi  阅读(0)  评论(0)    收藏  举报