2023.10.6 若干杂题

P1552 [APIO2012] 派遣

每个点作为管理者,只需要计算其子树内,最多有多少个人加起来不大于 \(M\),考虑维护前 \(k\) 小的元素。
可以使用左偏树合并。
然而其实可以平衡树合并,每次在平衡树上二分。

P2685 [TJOI2012] 桥

首先,Boss 镇守的桥一定是最短路上的边,使得我们不得不改变线路。
考虑对于每条非最短路的路径,如果走了这条,是哪些边可能被短掉了?
对于每条边,计算强制经过这条边的最短路。
再维护 \(L_u\) 表示 \(u\),从 \(1\) 开始走最短路到 \(u\),最多与 \(1\to n\) 的最短路重合到第几个点。
\(R_u\) 表示从 \(n\) 开始,同理。
\(L_u,R_u\) 可以用 BFS 维护。
那么 \([L_u,R_u]\) 这个区间里的边被断掉,就可能走这条路。考虑区间求 \(\min\) 用线段树维护。

P3160 [CQOI2012] 局部极小值

考虑从小到大加入数,如果一个点是局部极小值,那么在其加入之前不能周围有数。
发现局部最小值的位置也最多 \(8\) 个,可以对其状压 dp,维护的是当前放了多少数,有哪些局部最小值被放了。
但是我们这样求的话,不能保证一个非局部极小值的点不是局部最小。
可以容斥,设当前有 \(x\) 个局部最小值,那么减去 \(x+1\) 方案数,加回 \(x+2\) 方案数......
\(x+1\) 加的位置可以随便填,反正都是要减去。
后面同理。考虑 dfs 求出所有方案。

P1446 [HNOI2008] Cards

这个非常显然的 Burnside 引理啊,考虑求每种置换的不动方案数。
考虑设计一个 dp,先求出所有循环的大小,\(dp_{i,j,k}\) 表示三种颜色分别填了 \(i,j,k\) 种,
设当前考虑循环大小是 \(s\),那么 \(dp_{i,j,k}=dp_{i-s,j,k}+dp_{i,j-s,k}+dp_{i,j,k-s}\).
一个循环只能填一种颜色。
注意所有点不动也是一种置换。

P3631 [APIO2011] 方格染色

由于 \(2\times 2\) 的异或值是已知的,不断扩展,发现对于所有点,
\(a_{1,1}\otimes a_{x,1}\otimes a_{1,y}\otimes a_{x,y}\) 也是已知的。
我们枚举 \(a_{1,1}\) 的值,对于一个信息 \(a_{x,y}=t\)\(a_{x,1}\otimes a_{1,y}=t\otimes a_{1,1}\).
那么 \(a_{x,1},a_{1,y}\) 的等量关系已知,等于或不等。
我们直接上带权并查集,如果有矛盾的就返回 \(0\)
如果不矛盾,连通块是 \(s\) 个,方案就是 \(2^{s-1}\),因为 \(a_{1,1}\) 也属于一个联通块。

P1450 [HAOI2008] 硬币购物

如果每一次询问都求一次背包,那么时间太大了。
考虑先求出不限制硬币数量的方案数。
考虑容斥,询问 \(d_1,d_2,d_3,d_4\) 的话。
我们钦定已经选了 \(d_i+1\) 枚硬币了,那么方案数是 \(dp_{m-c_i(d_i-1)}\),要减去。
注意每种硬币都减是算重复了的,所以再次容斥原理,把同时选超两枚硬币的方案加回来,等。。。

P4448 [AHOI2018初中组] 球球的排列

发现若 \(a_i\cdot a_j\) 是平方数,\(a_i\cdot a_k\) 是平方数,那么 \(a_i\cdot a_k\) 也是平方数。
所以问题变成了:每个小球有颜色,相邻的小球颜色不同,问方案数。
我们可以一个一个颜色插入进去,
可以设一个状态 \(f_{i,j,k}\) 表示当前考虑前 \(i\) 个球,之前颜色同色相邻的有 \(j\) 对,当前颜色同色相邻的有 \(k\) 对。
如果当前颜色已经插了 \(p\) 中颜色进去了,
\(j,k\) 不变,那么插入的肯定不是同色相邻之间,有 \(i-j-(2(p-1)-k)\) 个位置。
\(j+1\to j\),那么插入了之前同色相邻间,有 \(j\) 个位置。
\(k\to k+1\),那么插入了当前同色球的旁边,就是 \(2(p-1)-k\) 个位置。
注意一个颜色处理完后,\(f_{i,j,k}\to f_{i,j+k,0}\).

P2154 [SDOI2009] 虔诚的墓主人

首先离散化。
考虑扫描线,只需处理每行相邻两个树之间的墓地的方案。
设当前处理 \((x,u),(x,v)\) 之间的方案。
首先行的贡献是 \(C(cntl,k)\cdot C(cntr,k)\),其中 \(cntl,cntr\) 分别是左边,右边有多少树,这是已知。
那么只需处理 \([u+1,v+1]\) 之间的贡献,只需树状数组,每个位置维护 \(C(cntu,k)\cdot C(cntd,k)\)
其中 \(cntu,cntd\) 是上面,下面有多少数,处理完每行,把这行的所有点所在列更新即可。

P5038 [SCOI2012] 奇怪的游戏

考虑黑白染色,因为黑白两色被操作次数相等。
若黑色有 \(c_1\),权值是 \(s_1\),白色有 \(c_2\),权值是 \(s_2\)
若最后的值是 \(x\),那么有 \(c_1x-s_1=c_2x-s_2\),则 \((c_1-c_2)x=s_1-s_2\)
\(c_1=c_2\),那么若 \(s_1\neq s_2\) 就无解。否则,二分 \(x\) 并网络流判断。
\(c_1\neq c_2\),直接算出 \(x\),并网络流判断。

P3350 [ZJOI2016] 旅行者

及其地套路,考虑分治,每次选一列并把跨越这列的询问处理。

posted @ 2023-10-06 20:52  s1monG  阅读(19)  评论(0)    收藏  举报