2026.9 做题记录 2

2026.9.16

P15732 [JAG 2024 Summer Camp #2] Do Make Segment Tree

定义状态函数 \(f_{u,x}\) 为考虑完 \(u\) 子树,且 \(B_u = x\) 的最小操作次数和。

\(l_u\)\(u\) 左儿子,\(r_u\)\(u\) 右儿子。那么:\(f_{u,x}=(\min\limits_{a+b=x}^{}f_{l_u,a}+f_{r_u,b})+|x-A_u|\)

注意到 \(f_{u}\) 是一个下凸的函数,做 \((\min,+)\) 卷积后仍然是下凸的。那么考虑用闵可夫斯基和优化这个。

维护差分数组 \(d_{u,x} = f_{u,x}-f_{u-1,x}\)。那么 \(d_u\) 可以通过以下方式得到:

  1. \(d_{l_u},d_{r_u}\) 归并得到 \(d_{u}\)
  2. \(d_{u,-\infin}\) 增加 \(|-\infin - A_u|\),并将 \(x\in (-\infin,A_u]\)\(d_{u,x}\) 减少 \(1\)
  3. \(x\in [A_u+1,+\infin)\)\(d_{u,x}\) 增加 \(1\)

显然 \(d_{u,x}\) 的种类数 \(T(u)\) 满足 \(T(u)\le \max(T(l_u),T(r_u))+O(1)\)。所以 \(d_{u,x}\) 的连续段只有 \(O(n)\) 个。

那么对每个 \(u\) 维护这 \(O(n)\) 个连续段 \((len,\Delta)\) 就行了。最后答案即为前缀和最小值。

时间复杂度 \(O(n2^n+qn^2)\)

P15502 [ICPC 2025 APC] Book Sorting

首先每本书最多移动到最左边一次,最右边也是。

如果 \(p_i\) 要移动到最左边,且存在 \(p_j < p_i\) 不移动到最左边。此时一定需要花费 \(1\) 的代价交换它们。那么不如把 \(j\) 也移动到最左边。则移动到最左边的元素构成的集合可以由区间 \([1,L]\) 表示。

同理,移动到最右边的元素构成的集合可以由区间 \([R,n]\) 表示。

那么答案等价于:\(\min\limits_{1\le L\le R \le n}^{}f(L,R)+(L-1) + (n-R)\)。其中 \(f(L,R)\) 为下标区间 \([L,R]\) 中逆序对数量,即 \(f(L,R)=\sum\limits_{i=L}^{R}\sum\limits_{j=L}^{i-1}[pos_j>pos_i]\)

\(g(L,R) = f(L,R)+(L-1)+(n-R)\)。有:

\[g(L,R)+g(L+1,R-1) -g(L+1,R)-g(L,R-1)\\ =f(L,R)+f(L+1,R-1)-f(L+1,R)-f(L,R-1)\\ =\sum\limits_{i=L+1}^{R-1}[p_{L}>p_i]+\sum\limits_{j=L+1}^{R-1}[pos_j>pos_R]+[pos_L>pos_R]-\sum\limits_{j=L+1}^{R-1}[pos_j>pos_R] -\sum\limits_{i=L+1}^{R-1}[pos_{L}>pos_i]\\ =[pos_L>pos_R]\\ \ge 0 \]

满足四边形不等式。那么直接跑分治就行了。时间复杂度 \(O(n\log^2 n)\)

P12550 [UOI 2025] Reversal ABC

注意到对于一个 \(\text{A}\),如果它跟后面的 \(\text{B}\) 换了,就不可能再跟前面的字符换。因为能跟前面的字符换当且仅当这个字符是 \(\text{C}\)。但此时我们是将 \(\text{AB}\) 变成了 \(\text{BA}\),能出现 \(\text{CA}\) 当且仅当 \(\text{B}\) 前面一个 \(\text{C}\) 换到它后面去了。但 \(\text{CB}\) 不能换。同理如果它跟前面的 \(\text{C}\) 换了,就不可能再跟后面的字符换。

对于 \(\text{B},\text{C}\) 也是一样的。

那么可以描述成:

  • 将序列拆成若干个区间 \([l_i,r_i]\)。每个区间只有至多两种字符。定义 \(f(l,r)\) 为对区间 \([l,r]\) 内部最多能换的次数,则序列操作次数等于 \(\sum f(l_i,r_i)\)。求这个的最大值。

先考虑 \(f(l,r)\) 怎么求。不妨设 \([l,r]\) 中只有 \(\text{A},\text{B}\)

发现最后序列形如 \(\text{BB}\dots \text{BBAA}\dots \text{AA}\)。则 \(f(l,r)\) 等于区间 \([l,r]\) 中每个 \(\text{B}\) 前面 \(\text{A}\) 的数量和。即 \(f(l,r)=\sum\limits_{i=l}^{r}\sum\limits_{j=i+1}^{r}[s_i=\text{A}\land s_j = \text{B}]\)

\(\text{B}\) 匹配 \(\text{A}\)\(\text{C}\) 匹配 \(\text{B}\)\(\text{A}\) 匹配 \(\text{C}\)。记 \(v_i\)\([1,i]\) 中是 \(s_i\) 的匹配的字符数量,\(sum_{i,x}\)\([1,i]\)\(s_j= x\)\(v_j\) 之和,\(cnt_{i,x}\)\([1,i]\)\(s_j=x\) 的数量。则 \(f(l,r) = sum_{r,\text{B}}-sum_{l-1,\text{B}}-(cnt_{r,\text{B}}-cnt_{l-1,\text{B}})\times cnt_{l-1,\text{A}}\)

定义状态函数 \(dp_{i}\) 为最后一个划分区间右端点为 \(i\) 的最大价值和。记 \(pos_{1,i}\)\(i\) 前面第一个与 \(s_i\) 不同的下标,\(pos_{2,i}\)\(i\) 前面第一个与 \(s_i,s_{pos_{1,i}}\) 都不同的下标。

那么转移有:

  1. \(j\in [pos_{1,i},i-1]\)\(dp_i\gets dp_{j}+0\)
  2. \(j\in [pos_{2,i},pos_{1,i}-1]\)。记 \(x,y\) 满足 \(\{x,y\}=\{s_{pos_{1,i}},s_i\}\)\(x\) 匹配 \(y\)\(dp_i\gets sum_{i,x}+(dp_{j}-sum_{j,x}+cnt_{j,x}\times cnt_{j,y})-cnt_{i,x}\times cnt_{j,y}\)
  3. \(j\in [0,pos_{2,i}-1]\)。不能转移。

斜率优化即可。时间复杂度 \(O(n)\)

2026.9.17

QOJ8074 Multiply Then Plus

对修改线段树分治。那么每个完整的时间区间都有若干个插入 \((k,a_i,b_i)\) 的操作,且总数是 \(O((n+q)\log n)\) 的。

对于询问,因为是单个时间点的询问,所以可以挂到线段树这个时间点到根所有完整的时间区间上。那么每个完整的时间区间都有若干个询问 \((x,l,r)\) 的操作,且总数是 \(O(q\log n)\) 的。

单独拿出一个完整的询问区间来看。记有 \(m_1\) 个插入操作,\(m_2\) 个查询操作。先将 \(k,l,r\) 放一起离散化。复杂度 \(O((m_1+m_2)\log (m_1+m_2))\)。建立区间线段树,将询问放到 \(O(\log (m_1+m_2))\) 个完整区间上。那么插入操作先挂到叶子上,每次相当于是合并两个上凸壳。整体复杂度是 \(O(m_1)\) 的。合并到当前点后把挂在这个点上的询问都处理掉。提前将询问按照 \(x\) 从小到大排序,这样挂在每个完整区间上的询问都是关于 \(x\) 单增的。那么就可以用指针扫一遍求答案了。均摊 \(O((m_2+m_1)\log m_1)\)

那么整体时间复杂度就是 \(O((n+q)\log^2 n)\) 的。

QOJ5438 半混合

一个 \(n \times m\) 的矩形有 \(\frac{n(n+1)m(m+1)}{4}\) 个子矩形。

则纯子矩形和混合子矩形都有 \(\frac{n(n+1)m(m+1)}{8}\) 个。

问题变成找到一种构造,使得恰好有 \(\frac{n(n+1)m(m+1)}{8}\) 个纯子矩形。

因为 \(8 \mid n(n+1)m(m+1)\),所以 \(n,m\) 中一定有一个数满足 \(x\bmod 4 =0\)\(x\bmod 4=3\)

也就是说,存在 \(n\)\(m\) 满足 \(\frac{x(x+1)}{4}\) 是整数。不妨设 \(m\) 满足条件。

那么分成 \(n\) 列,每列都是一个 \(1\times m\) 的矩形。相当于求一组满足:

  1. \(\sum x_i = m\)
  2. \(\sum \frac{x_i(x_i+1)}{2}=\frac{m(m+1)}{4}\)

的解。每次贪心删最大的 \(x\) 就是对的,不知道为啥。

时间复杂度 \(O(nm)\)

QOJ8079 Range Periodicity Query

判定 \(s[1:k]\) 是否是 \(s\) 的周期。等价于判定 \(s[1:|s|-k]\)\(s[k+1,|s|]\) 是否相等。

对每个长度 \(k\) 找到区间 \([l_k,r_k]\)。使得 \(k\)\(S_{l_k\sim r_k}\) 的周期。显然有 \(l_k = k\)。二分哈希做到 \(O(n\log n)\)

再到着枚举长度扫一遍就可以求答案了。线段树做到 \(O(n\log n)\)

P3780 [SDOI2017] 苹果树

首先注意到这个 \(t-h \le k\) 就相当于随便在选了苹果的点中钦定一个点的深度作为 \(h\)。因为当 \(h\) 不是最大深度时不优。

限制了祖先必须选,考虑按照 dfn 序做 DP。

对于一个点 \(u\),对它进行完决策后有两种情况:

  1. \(u\) 子树继续选点。下一步决策 dfn 序中 \(u\) 下一个点,这个点的父亲一定是 \(u\)。保证了祖先必须选。
  2. \(u\) 子树不再选点。记 \(r_u\)\(u\) 子树中 dfn 序的最大值,下一步决策 dfn 序为 \(r_u+1\) 的点。显然,这个点一定是 \(u\) 的某个祖先的另一个儿子,保证了祖先必须选。

定义 \(dfn_u\)\(u\) 的 dfn 序,\(id_x\) 为 dfn 序为 \(x\) 的点 \(u\) 编号,\(r_u\)\(u\) 子树中 dfn 序最大值。

定义状态函数 \(f_{i,x}\) 为考虑完 dfn 序的前 \(i\) 个点,苹果总数 \(t\) 等于 \(x\) 且没有钦定某个点时的最大价值和;\(g_{i,x}\) 为考虑完 dfn 序的前 \(i\) 个点,苹果总数 \(t\) 减去钦定的点深度 \(h\) 等于 \(x\) 时的最大价值和。

考虑转移,现在已知不计算 \(i\) 时的 \(f'_{i},g'_i\),有:

\[f_{i,x} \gets v_{id_i}\times x+\max\limits_{\max(0,x-a_{id_i})\le y \le x}^{}( f'_{i,y}-v_{id_i}\times y)\\ g_{i,x}\gets v_{id_i}\times x+\max\limits_{\max(0,x-a_{id_i})\le y \le x}^{}(g'_{i,y}-v_{id_i}\times y)\\ g_{i,x}\gets v_{id_i}\times (x+dep_{id_i})+(\max\limits_{\max(0,x+dep_{id_i}-a_{id_i})\le y \le x+dep_{id_i}-1}^{}f'_{i,y}-v_{id_i}\times y) \]

然后对 \(j\in \{i+1,r_i+1\}\) 更新:

\[f'_{j,x}\gets f_{i,x}\\ g'_{j,x}\gets g_{i,x} \]

单调队列优化做到 \(O(n^2 + nk)\)。因为 \(f_{*,x}\) 满足 \(0\le x \le n+k\)\(g_{*,x}\) 满足 \(0\le x \le k\)

注意到对于一个 \(f_{i,x}\),如果最后钦定的深度小于 \(dep_{id_i}\),不如直接在 \(i\) 这里钦定了。所以 \(x - dep_{id_i} > k\) 的状态一定无用。所以 \(f_{i,x}\) 实际上有用的 \(x\) 满足 \(dep_{id_i}\le x \le k+dep_{id_i}\)。总量就是 \(O(nk)\) 的。

整体时间复杂度为 \(O(nk)\)

2026.9.18

AT_agc056_b [AGC056B] Range Argmax

考虑从大到小填数,这样一个区间第一次填的数就是最大值,那么下标也就确定了。

\(pos\) 为当前最大值的位置,对于一个区间 \([L,R]\)

  1. \(R < pos\)。不确定 \(x\)
  2. \(L\le pos \le R\)。确定 \(x\)\(pos\)
  3. \(pos<L\)。不确定 \(x\)

这样就变成两个子问题了。但实际上我们只在意下标,所以直接这么做会算重。

\(pos\) 将剩下不确定 \(x\) 的区间分成 \(R<pos\)\(L>pos\) 两类,记 \(pos'\)\(R < pos\) 这一类区间中第一个确定的 \(x\)

\(pos' < L_0\) 时先确定 \(pos'\) 再确定 \(pos\) 是等价的。因为 \(pos' < L \le R < pos\) 的区间是不受 \(p_{pos}\)\(p_{pos'}\) 大小限制的(因为一定比它们的最小值小);\(R < pos'\) 的区间与 \(pos\) 无关;\(L > pos\) 的区间与 \(pos'\) 无关;\(L \le pos \le R\) 的区间因为 \(pos' <L_0\) 所以与 \(pos'\) 无关;\(L \le pos' \le R < pos\) 的区间与 \(pos\) 无关。

那么我们可以加强枚举的限制来做到不重不漏。即枚举 \(pos\)\(R < pos\) 这一类需要满足第一次枚举的 \(pos'\) 在区间 \([L_0,pos)\) 中。

定义状态函数 \(f_{l,r,p}\) 为只确定被 \([l,r]\) 包含的区间的 \(x\),且 \(p\) 为第一次枚举的 \(pos\) 的方案数。

\(L_{l,r,pos}\) 为包含 \(pos\) 且被 \([l,r]\) 包含的区间 \([L,R]\) 中,\(L\) 的最小值。

枚举 \(pos\),当存在被 \([l,r]\) 包含且包含 \(pos\) 的区间 \([L,R]\) 时转移为:

  • \(f_{l,r,pos}\gets f_{l,pos -1,y}\times f_{pos+1,r,x}[L_{l,r,pos}\le y]\)

\([l,r]\) 中不存在区间 \([L,R]\) 时,初始化 \(f_{l,r,n}=1\)。答案为 \(\sum\limits_{x} f_{1,n,x}\)

后缀和优化做到 \(O(n^3)\)

AT_agc067_b [AGC067B] Modifications

按照时间倒着做。那么一个点第一次被填的值就是它最终的值。

考虑判定一个序列 \(a\) 是否合法。相当于每次选择一个值相同的区间 \([L_i,R_i]\),然后把 \([L_i,R_i]\) 中所有元素变成通配符。要求最后所有元素都是通配符。

这个操作本身是没有性质的。但是如果确定了最后哪些元素没有变成通配符,就一定可以知道哪些区间是合法的。这样就产生了子结构。

那么考虑容斥。定义状态函数 \(f_{l,r}\) 为能将 \([l,r]\) 中所有元素变成通配符时,\(a\) 序列的数量。总方案数为 \(C^{r-l+1}\)。记 \(p_{1,2,\dots,k}\) 为某个不合法的序列 \(a\) 中,最后没有变成通配符的下标。可知 \([l,p_1-1],[p_1+1,p_2-1],\dots,[p_{k-1}+1,p_k-1],[p_k+1,r]\) 这些 \(a\) 的子区间都是合法的。且不存在 \([L,R]\),满足:所有 \(p_i\in [L,R]\)\(a_{p_i}\) 相同。

定义状态函数 \(g_{l,r,p}\) 为考虑完所有 \(p_i \le r\),最后一个在 \(r\),且极长的 \(a_{p_i}\) 相同的后缀起始点(第一个不同值位置 \(+1\))为 \(p\) 的方案数。对于转移:

  1. \(p_1=r\)\(g_{l,r,l}\gets f_{l,r-1}\times C\)。要求不存在 \([L,R]\),使得 \(L \le r = R\)
  2. \(p_i = r,i>1\)
    1. \(a_{p_i}=a_{p_{i-1}}\)\(g_{l,r,p}\gets g_{l,r',p}\times f_{r'+1,r-1}\)。要求不存在 \([L,R]\),使得 \(p \le L \le r'\le R\le r\)
    2. \(a_{p_i}\ne a_{p_{i-1}}\)\(g_{l,r,r'+1}\gets g_{l,r',p}\times f_{r'+1,r-1}\times (C-1)\)。要求不存在 \([L,R]\),使得 \(p \le L \le r'\le R\le r-1\)

对于 \(f_{l,r}\),初始 \(f_{l,r} = C^{r-l+1}\)。枚举 \(p_k = x\),有 \(f_{l,r}\gets -\sum \limits_{p}g_{l,x,p}\times f_{x+1,r}\),要求不存在 \([L,R]\),使得 \(p\le L \le x \le R \le r\)

初始化 \(f_{i,i-1}=1\)。答案为 \(f_{1,n}\)。时间复杂度 \(O(n^4)\)

CF1864H Asterism Stream

\(p(i)\) 为走到 \(i\) 的概率,答案即为 \(\sum\limits_{i=1}^{n-1}p(i)\)

对于每个 \(+1\) 操作的实际贡献,记 \(cnt\) 为其后面 \(\times 2\) 操作数量,那么就是 \(2^{cnt}\)

那么整个操作的贡献可以用 \(s_{0\sim k}\) 表示。其中 \(s_i\) 为后面 \(\times 2\) 操作数量为 \(i\)\(+1\) 操作数量,其中 \(k\)\(\times 2\) 的操作数量。则贡献可以表示为:\(2^{k}+\sum\limits_{i=0}^{k}2^{i}s_i\)。对答案的贡献为 \(\frac{1}{2^{k+\sum\limits_{i=0}^{k}s_i}}\)

问题变成对 \(2^{k}+\sum\limits_{i=0}^{k}2^{i}s_i<n\)\(s\) 计数。

枚举 \(k\),再添加一个数 \(s'\),使得问题变成对 \(s'+\sum\limits_{i=0}^{k}2^is_i = n - 2^k-1\)\((s',s)\) 计数。将 \(s'\)\(s_i\) 用二进制表示,变成:

\[n-2^k-1\\ =\sum\limits_{j=0}^{V}2^{j}s'_{j}+\sum\limits_{i=0}^{k}\sum\limits_{j=0}^{V-k}2^{i+j}s_{i,j} \\ =\sum\limits_{x=0}^{V}2^{x}(s'_{x}+\sum\limits_{i=0}^{\min(k,x)}s_{i,x-i}) \]

因为 \(s'_{x},s_{i,j}\in \{0,1\}\),所以对于任意 \(x\)\(0\le s'_{x}+\sum\limits_{i=0}^{\min(k,x)}s_{i,x-i} \le k+2\)。求和时这个量级的进位是可以接受的。

从低位往高位计数。定义状态函数 \(f_{x,y}\) 为考虑完二进制 \([0,x]\) 这些位,它们求和之后等于 \(n-2^k-1\) 保留二进制 \([0,x]\) 这些位后加上 \(2^{x+1}y\) 的贡献和。对于转移:

  • 枚举 \(s'_{x}+\sum\limits_{i=0}^{\min(k,x)}s_{i,x-i} = z\) 再枚举 \(y\)。那么第 \(x\) 位实际上是 \((z+y)\bmod 2\)。要求 \((z+y)\bmod 2\)\(n-2^k-1\) 二进制下第 \(x\) 位相同。有 \(f_{x,\lfloor\frac{z+y}{2}\rfloor}\gets f_{x-1,y}(g_{x,z}+g_{x,z-1})\)。其中 \(g_{x,z}\)\(\sum\limits_{i=0}^{\min(k,x)}s_{i,x-i} = z\)\(\prod\limits_{i=0}^{\min(k,x)}\frac{1}{2^{2^{(x-i)s_{i,x-i}}}}\) 之和,这个暴力背包。

最后对于一个 \(k\) 的贡献就是 \(f_{V,0}\times \frac{1}{2^k}\)。时间复杂度 \(O(TV^4)\),其中 \(V=\log n\)

2026.9.21

CF1830D Mex Tree

一棵树的价值为:

\[\sum\limits_{1\le u\le v\le n}^{}[\exist x\in P(u,v), a_x = 0]+\sum\limits_{1\le u\le v\le n}^{}[\exist x\in P(u,v), a_x = 0][\exist y\in P(u,v), a_y=1]\\ =n(n+1)-2\sum\limits_{1\le u\le v}^{}[\forall x\in P(u,v), a_x = 1]-\sum\limits_{1\le u\le v}^{}[\forall x\in P(u,v), a_x = 0] \]

先给树按照深度的奇偶性染色。记 \(cnt\) 为奇数深度的点数,那么答案不会小于 \(n(n+1)-\min(cnt,n-cnt)-n\)

定义状态函数 \(f_{u,x,0/1}\) 表示考虑 \(u\) 为根子树,和 \(u\) 颜色相同的连通块大小为 \(x\)\(u\) 的颜色是黑或白的最小代价。显然 \(x \le \min(siz_u, 2\sqrt{n})\)

暴力背包时间复杂度 \(O(n\sqrt{n})\)

P16319 [ICPC 2023 Jinan R] 铁路环游

定义状态函数 \(f_{i,j}\) 为前 \(i\) 个,铺了 \(j\) 条铁路的最大得分。有:

  1. \(f_{i,j}\gets f_{i-1,j}\)
  2. \(f_{i,j}\gets f_{i-k,j-k}+w(i-k+1,i)\)。其中 \(w(l,r)\) 为被 \([l,r]\) 包含的区间得分和。

换维,\(f_{i,j}\) 为前 \(i\) 个,铺了 \(i+j\) 条铁路的最大得分。有:

  1. \(f_{i,j}\gets f_{i-1,j+1}\)
  2. \(f_{i,j}\gets f_{i-k,j}+w(i-k+1,i)\)

\(g_{i,j} = f_{i,j}+w(i+1,u)\),其中 \(u\) 为当前转移点。那么每次相当于对一个 \(R = i\) 的区间 \([L,R]\),将 \(x\in [1,L-1]\)\(g_{x,*}\) 都增加 \(v\)。如果令 \(\delta_x\)\(g_{x,*}\) 在这一轮的增加量,那么 \(\delta_x \ge \delta_{x+1}\)。那么对于一个 \(g_{x,k}\),若存在 \(y < x\land g_{y,k}\ge g_{x,k}\),则 \(g_{x,k}\) 不可能在之后用来转移。

如果能对每个 \(k\) 维护出 \(g_{x,k}\) 的单调栈,那么转移就是 \(O(1)\) 的了。

对每个 \(k\),维护单调栈的差分。记为 \((p_i,d_i)\) 为单调栈中第 \(i\) 个元素在原序列的下标,\(d_i = g_{p_i,k}-g_{p_{i-1},k}\)。每次将 \([1,L-1]\)\(g_{x,k}\) 增加 \(v\),相当于执行:

  1. \(d_1 \gets d_1 + v\)
  2. 找到最大的 \(i\),使得 \(p_i \le L-1\)。若 \(d_{i+1}-v \le 0\),则将 \(d_{i+2}\) 修改成 \(d_{i+2}+d_{i+1}-v\),并删去 \((p_{i+1},d_{i+1})\)。重复执行此过程,直到 \(d_{i+1}-v>0\)。此时将 \(d_{i+1}\) 修改成 \(d_{i+1}-v\)

并查集维护每个点前面第一个在栈中的元素位置即可。时间复杂度 \(O(n(n+m)\alpha(n))\)\(O(n(n+m)\log n)\)

QOJ5308 RPG职业联赛

设输出、辅助和增益分别是 \(1,2,3\)

先二分答案 \(t\)

考虑建立网络流模型:

  1. 右部点为 \(\{1\},\{2\},\{3\},\{1,2\}\)。每个点向超级汇点连容量为 \(t\),费用为 \(0\) 的边。这样只要最后所有都顶满了,就说明 \(1,2,3\) 恰好够 \(t\) 组每组一个,且剩下 \(1,2\) 能分进 \(t\) 组中。
  2. 左部点为 \(i\),表示一名玩家。\(i\) 向是 \(S_i\) 的子集且是右部点的点连容量为 \(1\),费用为 \(0\) 的边。
  3. 超级源点向每个左部点 \(i\) 连容量为 \(1\),费用为 \(p_i\) 的边。流这条就说明选这个玩家。

显然,只要最后最大流为 \(4x\),就说明可以分的组数不小于 \(x\),且分 \(x\) 组时费用就是最小费用最大流。

考虑先把组数求出来。发现此时代价是不重要的,所以对于 \(S_i\) 相同的点可以缩在一起。

将左右部点交换一下,变成判断一张有 \(4\) 个左部点,\(7\) 个右部点的带权二分图是否存在完美匹配。根据 Hall 定理,等价于 \(\min(\sum\limits_{x\in N(S)}^{}v_x-\sum\limits_{x\in S}^{}v_x)\ge 0\)。而 \(\sum\limits_{x\in S}^{}v_x = |S|\times t\),所以等价于对所有 \(S\),均有 \(\sum\limits_{x\in N(S)}^{}v_x \ge |S|\times t\)

那么最大组数 \(t\) 满足:\(t = \min\limits_{ S}^{} \lfloor\frac{\sum\limits_{x\in N(S)}^{}v_x}{|S|}\rfloor\)

再考虑求最小代价:先把所有的都选上,再从大到小删玩家。显然,只要删除之后最大组数仍为 \(t\) 就可以删除。

最后考虑单点修改。分两种情况:

  1. 当前玩家被选了。答案会变当且仅当将他和一个没被选的玩家替换。枚举这个没被选的玩家的 \(S\),显然只会选满足 \(S_i = S\) 中,\(p_i\) 最小的那个。
  2. 当前玩家没被选。同理,枚举替换玩家的 \(S\),选 \(p_i\) 最大的那个。

怎么写都能过。复杂度 \(O(m^22^kq\log n),k=4,m=7\)。也可以做到 \(O(q\log n)\)

QOJ5440 P-P-Palindrome

注意到 \((P,Q)\) 合法当且仅当 \(P,Q\) 的最小回文循环节相同。

PAM 找到每个字符串的所有回文子串,再对每个回文子串找最小回文循环节即可。

时间复杂度 \(O(n\log V)\)

posted @ 2026-09-23 18:32  harmis_yz  阅读(4)  评论(0)    收藏  举报