【好题乱做】ABC-G

【好题乱做】ABC-G

ABC212G Power Pair

由于 \(P\) 为质数,因此设 \(P\) 的原根为 \(g\),则可以对原式进行变形。

\[\begin{aligned} &\sum_{x=0}^{P-1}\sum_{y=0}^{P-1}[x^n\equiv y\textstyle\pmod P]\\ =&~1+\displaystyle\sum_{x=1}^{P-1}\sum_{y=1}^{P-1}[x^n\equiv y\textstyle\pmod P]\\ =&~1+\displaystyle\sum_{i=1}^{P-1}\sum_{j=1}^{P-1}[g^{in}\equiv g^j\textstyle\pmod P]\\ =&~1+\displaystyle\sum_{i=1}^{P-1}\sum_{j=1}^{P-1}[in\equiv j\textstyle\pmod{P-1}]\\ =&~1+\displaystyle\sum_{i=1}^{P-1}\sum_{j=1}^{P-1}[\gcd(i,P-1)\mid j]\\ =&~1+\displaystyle\sum_{i=1}^{P-1}\frac{P-1}{\gcd(i,P-1)}\\ =&~1+\displaystyle\sum_{d\mid P-1}d\varphi(d)\\ \end{aligned}\]

即可在 \(O(d(P)\sqrt P)\) 的时间复杂度内解决。

ABC216G 01Sequence

\(f_i\) 表示前 \(i\) 个中 \(0\) 的个数,则条件可以转化为差分约束的模型。发现边权非负,跑 Dijkstra 即可。

ABC217G Groups

\(f_{i,j}\) 表示前 \(i\) 个数分为 \(j\) 组的方案数,则可以对 \(i\) 放入之前的一组还是新开一组讨论,得到转移方程。

\[f_{i,j}=f_{i-1,j-1}+f_{i-1,j}\times (j-\lfloor \dfrac{i-1}{M}\rfloor) \]

ABC219G Propagation

ABC221G Jumping sequence

先用 \((x,y)\rightarrow(x+y,x-y)\) 的 trick 使得 \(x,y\) 两维独立,再用 bitset 优化背包即可。

ABC222G 222

BSGS 板子。

ABC224G Roll or Increment

显然要先随机到一个 \([x,T]\) 范围内的数,然后再加到 \(T\),可以计算出期望代价 \(E\)

\[E=\frac{n}{T-x+1}\times B+\frac{1}{T-x+1}\sum_{i=x}^TA\times(T-i) \]

\(k=T-x+1\),化简得到:

\[E=\frac{nB}{k}+\frac{A(k-1)}{2} \]

由均值不等式,当 \(k=\sqrt{\frac{2nB}{A}}\) 时,\(E\) 有最小值,取 \(k\) 附近整数检验即可。

ABC227G Divisors of Binomial Coefficient

题目即是要求对 \([1,K]\)\([N-K+1,N]\) 分解质因数。因此预处理 \(10^6\) 以内的质数,这样筛完后最多剩下一个大于 \(10^6\) 的质数,计算答案即可。

ABC228G Digits on Grid

直接 dp 可能会算重,但是数据范围非常小,可以考虑将“每次选了哪种数字后下一步能到达的行/列”作为状态,然后 dp 套 dp。

具体地,预处理 \(g_{i,S,0/1}\) 表示当前的行/列集合为 \(S\),选了数字 \(i\),下一步能到达的列/行集合。再设 \(f_{i,S}\) 表示当前到第 \(i\) 个字符,并且行/列集合为 \(S\) 时的方案数。转移方程式不难得出。

\[f_{i,g_{j,S,0/1}}\leftarrow f_{i,g_{j,S,0/1}}+f_{i-1,S} \]

ABC229G Longest Y

\(a_i\) 表示 \(S\) 中第 \(i\)\(\texttt{Y}\) 的位置,令 \(b_i=a_i-i\),那么原问题等价于:每次选择一个 \(i\),令 \(b_i\leftarrow b_i+1\)\(b_i\leftarrow b_i-1\),至多进行 \(k\) 次操作,求最终最多能让多少个数同时相同。二分答案 \(x\) ,check 时枚举连续的 \(x\) 个数,求出将他们都变成中位数的代价,与 \(k\) 作比较。

ABC234G Divide a Sequence

考虑 dp,设 \(f_i\) 表示前 \(i\) 项的答案,则有转移式:

\[f_i=\sum_{j=0}^{i-1}f_j\times calc(j+1,i) \]

\(calc(j+1,i)\) 根据定义可以拆成 \(\max-\min\) 的形式,两部分都可以用单调栈维护。

ABC235G Gardens

ABC236G Good Vertices

\(f_{i,j}\) 表示从 \(1\) 走到 \(i\) 恰好用 \(j\) 步的最小时间,写出转移式后便可以用矩阵快速幂优化。

ABC237G Range Sort Query

ABC238G Cubic?

先分解质因数。考虑以下做法:

对于质数 \(p\),令 \(to_p\) 随机赋权为 \([0,2]\) 中的一个数,对于 \(x=\prod_{i=1}^k p_i^{\alpha_i}\),令 \(val(x)=\sum_{i=1}^k\alpha_ito_{p_i}\)。那么对于询问 \((l,r)\),当 \(\sum_{i=l}^r val(a_i) \bmod 3\neq 0\) 时,答案必定为 No

将以上做法随机 \(T=200\) 次,便能基本保证正确。

ABC240G Teleporting Takahashi

先将 \(X,Y,Z\) 取绝对值。

枚举 \(x\) 这一维走了 \(a\) 步,剩下两维可以通过将坐标轴旋转 \(45^\circ\) 时的组合意义或代数推导得出计算方案的式子,答案不难得到。

\[\sum_{a=0}^N\binom{N}{a}\binom{a}{\frac{a+X}{2}}\binom{N-a}{\frac{N-a+Y+Z}{2}}\binom{N-a}{\frac{N-a+Y-Z}{2}}[2\mid(a+X)][2\mid (N-a+Y+Z)] \]

ABC242G Range Pairing Query

\(cnt_i\) 表示区间内颜色为 \(i\) 的个数,则答案为 \(\sum_{i=1}^N\lfloor \frac{cnt_i}{2}\rfloor\)。这是莫队板子,记录 \(cnt_i\) 即可。

ABC243G Sqrt

\(f_n\) 表示以 \(n\) 开头的方案数,得出转移方程式。

\[f_n=\sum_{i=1}^{\lfloor\sqrt{n}\rfloor}f_i=\sum_{i=1}^{\lfloor\sqrt{n}\rfloor}\sum_{j=1}^{\lfloor\sqrt{i}\rfloor}f_j=\sum_{i=1}^{\lfloor\sqrt[4]{n}\rfloor}(\lfloor\sqrt{n}\rfloor-i^2+1)f_i \]

预处理 \(6\times 10^4\) 以内的 \(f_n\) 即可。

ABC244G Construct Good Path

随便求出一个生成树,从 \(1\) 号点开始 dfs,对于边 \((u,v)\),从 \(v\) 回溯至 \(u\) 时,若不满足 \(s_v\) 的限制,可将 \(v\rightarrow u\) 修改为 \(v\rightarrow (u\rightarrow v)\rightarrow u\) 使得 \(v\) 满足要求。如果最后不满足 \(s_1\) 的限制,将 \(x\rightarrow 1\) 修改为 \(x\rightarrow 1\rightarrow (x\rightarrow 1\rightarrow x)\) 即可。

ABC245G Foreign Friends

ABC247G Dream Team

对于每个点,在其行列之间连一条流量为 \(1\),容量为 \(-val\) 的边,显然这是一个二分图,那么每行每列最多选一个等价于二分图的最大匹配,跑最小费用最大流即可,EK 增广 \(k\) 次后即是选出 \(k\) 个点时的答案。

ABC250G Stonks

考虑反悔贪心,每天的股票有三种贡献,分别是 \(-x,0,+x\),因此先假设每天都是 \(+x\),然后用优先队列找到在它之前的一个时间更改当时的状态。

通俗地讲,一开始进行两次 push 操作,并将 \(x\) 计入答案,之后弹出一次,代表从 \(+x\) 变为 \(0\),再弹出一次,代表从 \(0\) 变为 \(-x\)

ABC252G Pre-Order

考虑区间 dp,设 \(f_{i,j,0/1}\) 表示编号为 \(P_i\)\(P_j\) 的这些点在树上形成一棵/多棵子树的方案数,对于前者可以直接从 \(f_{i+1,j}\) 转移过来,对于后者可以枚举 \(P_i\) 子树内的最后一个点 \(k\),从而得到转移方程。

\[f_{i,j,0}=f_{i+1,j,0}+f_{i+1,j,1} \]

\[f_{i,j,1}=\sum_{k=i}^{j-1}[P_i<P_{k+1}]f_{i,k,0}\times (f_{k+1,j,0}+f_{k+1,j,1}) \]

ABC253G Swap Many Times

类似分块,零散块暴力交换,对于连续的整段手模找规律,发现可以整体移动。

ABC256G Black and White Stones

先枚举每条边上有 \(x\) 个白色石子。

对于一条边而言,两个顶点处的颜色共有四种情况,因此设 \(f_{i,0/1,0/1}\) 表示考虑了前 \(i\) 条边,第 \(i\) 条边两个顶点分别为白/黑色的方案数,转移式不难得出。

直接转移会超时,观察发现转移可以写成矩阵的形式,即为:

\[A=\begin{bmatrix}\displaystyle\binom{D-1}{x-2}&\displaystyle\binom{D-1}{x-1}\\\\\displaystyle\binom{D-1}{x-1}&\displaystyle\binom{D-1}{x}\end{bmatrix} \]

由于首尾必须是同种颜色,因此对于每个 \(x\),计算 \(\{A^n\}_{0,0}\)\(\{A^n\}_{1,1}\) 的和即可。

ABC257G Prefix Concatenation

直接 dp,设 \(f_i\) 表示将 \(T[1,i]\) 分割成若干个 \(S\) 的前缀时的最小个数。则有转移方程式:\(f_i=\min\{f_j\}+1\),其中要求 \(S[1,i-j]=T[j+1,i]\)

不难发现 \(f_i\) 单调不降,因此每回需要找到最小的满足条件的 \(j\)。发现这个条件的形式类似于 border,因此对 \(S+T\) 跑一遍 KMP 即可。

ABC258G Triangle

枚举边 \((i,j)\),用 bitset 统计有多少个点 \(k\),使得 \((i,k)\)\((j,k)\) 都有边。

ABC260G Scalene Triangle Area

先在每一行内差分,变成竖着一段 \(+1\),斜着一段 \(-1\)。再对这两种分别差分即可。

ABC263G Erasing Prime Pairs

绝大多数能使得 \(x+y\) 是质数的 \((x,y)\) 必定是一奇一偶,除了 \((1,1)\),因此这是一个二分图,在满足对数足够多的同时还要最大化剩余 \(1\) 的个数,跑最小费用最大流即可。

ABC264G String Fair

将所有 \(|S|\le 2\) 的字符串 \(S\) 看作点,新增一个字符的贡献作为 \(\varnothing\rightarrow a\)\(a\rightarrow ab\)\(ab\rightarrow bc\) 的边权,只需判断是否存在正环并求出最长路。

ABC265G 012 Inversion

线段树维护每个数的出现次数与数对 \((x,y)\) 的出现次数即可。

ABC266G Yet Another RGB Sequence

\(\texttt{rg}\) 看成一个整体 \(\texttt{s}\),先把 \(K\)\(\texttt{s}\)\(R-K\)\(\texttt{r}\)\(B\)\(\texttt{b}\) 排好。对于剩下的 \(G-K\)\(\texttt{g}\),有 \(R+B+1\) 个空可以插入,由于不能插到 \(\texttt{r}\) 后面,因此只有 \(B+K+1\) 个空能插,答案即为 \(\binom{B+R}{B}\binom{R}{K}\binom{B+G}{B+K}\)

ABC268G Random Student ID

对于字符串 \(S\),考虑字符串 \(T\) 对其的贡献,发现根据是否为前缀的分类,只有 \(0,\frac{1}{2},1\) 三种,用 Trie 树统计这三类的数量即可。

ABC270G Sequence in mod P

特判 \(S=G\)\(A\le 1\) 的情况,推式子可得 \(A^i\times(AS+B-S)\equiv AG+B-G\pmod{P}\),BSGS 即可。

ABC271G Access Counter

\(f_{i,j}\) 表示第 \(i\) 次打卡发生在 \(j\) 时刻的概率,转移式为矩阵乘法的形式,显然可以用矩阵快速幂优化。考虑如何计算系数,即 \(a_{i,j}\) 表示 \(i\) 时刻打卡的下一次打卡在 \(j\) 时刻的概率。

设同一天内 \(i\) 时刻打卡的下一次打卡在 \(j\) 时刻的概率为 \(p\),一天都没有打卡的概率为 \(q\),那么有式子:

\[a_{i,j}=\sum_{k=0}^{\infty} q^kp=\frac{p}{1-q} \]

ABC272G Yet Another mod M

本质是判断是否存在 \(M\) 使得模 \(M\) 意义下存在绝对众数,转化为 \(M\mid (A_i-A_j)\),每次随机出两个下标 \(i,j\),判断 \(|A_i-A_j|\) 的所有因数是否满足条件即可。

ABC274G Security Camera 3

考虑网络流建模,将每个横/纵向的极长 . 连续段看作一个点。原图中每一个位置都会对恰好一个横/纵向的极长 . 连续段有贡献,将这两个连续段所对应的点之间连边,最后所求的即为二分图的最小点覆盖数量,即是最大匹配数。

ABC278G Generalized Subtraction Game

ABC281G Farthest City

将无向连通图按照 \(dis(1,u)\) 分层,那么合法方案只需让最后一层恰有 \(N\) 一个点。考虑 dp,由于转移时与相邻两层之间的连边数有关,设 \(f_{i,j}\) 表示 \(i\) 个点的有标号无向连通图且最后一层恰有 \(j\) 个点的方案数,枚举 \(i-1\) 层的结点数量,可以得出转移式:

\[f_{i,j}=\sum_{k=1}^{i-j}f_{i-j,k}\times \binom{N-1-(i-j)}{j}\times (2^k-1)^j\times 2^{\binom{j}{2}} \]

ABC282G Similar Permutation

考虑原问题的弱化版:给定相邻两项大小关系,求合法排列的个数。

对于弱化版,可以设 \(f_{i,j}\) 表示当前已经考虑了前 \(i\) 位,第 \(i\) 位是前 \(i\) 项中第 \(j\) 小的合法排列的方案数。之后讨论第 \(i-1\) 位的相对大小进行转移,前缀和优化能做到 \(O(n^2)\) 的时间复杂度。

考虑原问题,类似的,设 \(f_{i,j,a,b}\) 表示当前已经考虑了前 \(i\) 位,相似度为 \(j\),排列 \(A\) 的第 \(i\) 位是前 \(i\) 项中第 \(a\) 小的且排列 \(B\) 的第 \(i\) 位是前 \(i\) 项中第 \(b\) 小的合法排列对的方案数。二维前缀和优化即可。

ABC283G Partial Xor Enumeration

线性基第 \(k\) 小板子题。

ABC286G Unique Walk

考虑非关键边 \((u,v)\),由于可以走任意次,那么 \(u\)\(v\) 本质上可以看成同一个点,即合并 \(u\)\(v\),这部分可以用并查集解决。对于只剩下关键边的情况,只需判断是否形成欧拉路径。

ABC287G Balance Update Query

离散化后上权值线段树,处理询问只需在线段树上二分。

ABC292G Count Strictly Increasing Sequences

\(f_{i,l,r,x}\) 表示当前考虑的是从高到低的第 \(i\) 位,第 \(l\) 个数到第 \(r\) 个数,且当前位剩余未填位置不小于 \(x\) 的方案数,转移较为简单,具体实现可以类似数位 dp,采用记忆化搜索的形式。

ABC293G Triple Index

\(cnt_i\) 表示区间内颜色为 \(i\) 的个数,则答案为 \(\sum\binom{cnt_i}{3}\),莫队板子。

ABC294G Distance Queries on a Tree

维护 \(dis_u\),修改边权等同于子树加,用线段树维护。

ABC295G Minimum Reachable City

并查集。根节点记录的是当前连通块中最靠左的结点,每次加边暴力向前跳,顺带合并即可。

ABC296G Polygon and Points

记录凸包的上凸壳与下凸壳,对于点 \(A(x,y)\),过 \(A\) 作与 \(y\) 轴平行的直线,分别在上凸壳与下凸壳二分找到直线与凸包相交的边,进而找到交点便可判断。

注意特殊处理凸包中与 \(y\) 轴平行的边。

ABC297G Constrained Nim 2

打表猜结论,发现 \(\mathrm{SG}(n)=\lfloor\frac{n\bmod (L+R)}{L}\rfloor\)

ABC299G Minimum Permutation

发现对于 \((i,j,k)\),若 \(i<j<k\)\(A_j<A_i=A_k\),那么答案中 \(A_j\) 一定在 \(A_k\) 前面,即只要一个元素不是最后一次出现,就可以不断的往后移,让小于它的元素放到它前面。记录每个元素最后一次出现的位置,维护单调栈与每个元素是否在栈内即可。

ABC300G P-smooth number

注意到极限数据下答案为 \(2\times 10^9\) 级别。因此直接 dfs,添加少量剪枝优化即可通过。

ABC302G Sort from 1 to 4

最终的序列是确定的,设 \(f_{i,j}\) 表示原来是 \(i\),最终变成 \(j\) 的位置的数量。考虑 \(i\)\(j\)\(f_{i,j}\) 条有向边,则对于每个环需要交换 \(siz-1\) 次。因此总的交换次数就是 \(n-tot\),其中 \(tot\) 表示环的数量。

自环的个数是 \(f_{i,i}\),二元环的个数是 \(\min\{f_{i,j},f_{j,i}\}\)。剩下的三元环和四元环在不存在二元环的条件下一定都包含同一个点,因此剩余环的个数就是 \(\max\{f_{i,j}-\min\{f_{i,j},f_{j,i}\}\}\)

ABC305G Banned Substrings

在 AC 自动机上做矩阵快速幂优化 dp 即可。

ABC307G Approximate Equalization

最终的序列至多有两种取值,设 \(f_{i,j}\) 表示前 \(i\) 项里最终有 \(j\) 项变为较大值的最少操作次数,直接转移即可。

ABC308G Minimum Xor Pair Query

\(\{a_n\}\) 从小到大重排后得到 \(\{b_n\}\),则有结论:

\[\min_{1\le i<j\le n}\{a_i \oplus a_j\}=\min_{1\le i\le n-1}\{b_i \oplus b_{i+1}\} \]

开两个 multiset,一个维护每个数当前的排名,另一个维护重排后相邻两项的异或值。每次操作时算出它与前一个数和后一个数分别异或后的值,在记录答案的 multiset 中进行增删操作。

ABC311G One More Grid Task

枚举上下边界,便可以转化为一维弱化版问题,单调栈即可。

ABC312G Avoid Straight Line

从反面考虑,计算 \((x,y,z)\) 在同一条链上的方案数,在 lca 处统计答案。设 \(f_u\) 表示目前遍历到的子树内(包括 \(u\))有多少对祖孙关系,直接做即可。

\[ans\leftarrow ans+f_u\times siz_v+f_v\times siz_u \]

\[f_u\leftarrow f_u+f_v+siz_v \]

ABC313G Redistribution of Piles

发现操作 2 在所有的操作 1 之后才有意义。对原数列排序后差分,设差分序列为 \(\{b_n\}\),则操作 1 等价于给 \(\{b_n\}\) 中第一个非零位置 \(-1\),操作 2 等价于给 \(b_1+1\)

枚举进行了多少次操作 1,可以得到答案为:

\[b_1+1+\sum_{i=2}^n\sum_{j=1}^{b_i}(\lfloor\frac{\sum_{k=1}^{i-1}b_k(n-k+1)+j(n-i+1)}{n}\rfloor+1) \]

内层的求和可以用类欧算法来优化复杂度。

ABC315G Ai + Bj + Ck = X (1 <= i, j, k <= N)

枚举 \(i\) 后就是 exgcd 板子。

ABC317G Rearranging

ABC321G Electric Circuit

ABC325G offence

考虑区间 dp。设 \(f_{i,j}\) 表示区间 \([i,j]\) 最少剩下几个字符,则有转移方程。

\[f_{i,j}=\min_{i<l\le j}\{f_{i,l-1}+f_{l,j}\} \]

\(S_i=\texttt{o}\)\(S_l=\texttt{f}\) 并且 \(f_{i+1,l-1}=0\) 时,\([l+1,j]\) 的区间可以再删掉 \(K\) 个,能够得出转移方程。

\[f_{i,j}\leftarrow\min\{f_{i,j},\max\{f_{l+1,j}-K,0\}\} \]

ABC328G Cut and Reorder

ABC334G Christmas Color Grid 2

删掉一个点后会使连通块数量发生变化的只有孤点和割点,对于一个割点,设其处在 \(x\) 个点双连通分量当中,那么将它删掉后会增加 \(x-1\) 个连通块。

ABC336G 16 Integers

ABC337G Tree Inversion

考虑点对 \((u,v)\) 会对哪些点造成贡献,发现一定是一个子树或整棵树除去一个子树的形式,从小到大加入点 \(u\),用树状数组在 dfs 序上维护已经加入的点,差分计算贡献即可。

ABC338G evall

考虑正常从左向右计算的过程,需要记录当前乘积式之前的总和 \(s\),当前数之前的乘积式的值 \(m\),当前数的值 \(n\)。将转移写成矩阵形式,对于出现乘号时的非线性转移式,可以将维护的 \(n\) 替换成 \(mn\)

需要计算每一对 \((i,j)\) 的和,直接在所有出现数字的位置累加矩阵并统计答案即可。

ABC339G Smaller Sum

离散化后对值域建可持久化线段树。

ABC341G Highest Ratio

求出前缀和,对于每个 \(l\) 要最大化 \(\frac{sum_r-sum_{l-1}}{r-l+1}\) 的值。将 \((i,sum_i)\) 看作二维平面上的点,即是要最大化 \((l-1,sum_{l-1})\)\((r,sum_r)\) 的斜率。从右往左扫,单调栈维护上凸壳即可。

ABC342G Retroactive Range Chmax

线段树标记永久化。在每个结点处存一个 multiset 即可。

ABC343G Compress Strings

先删去被其他字符串完全包含的字符串,用 KMP 求出剩下的里面两两相接时的最短长度,状压 dp 即可。

ABC346G Alone

对于每个数字 \(x\),仅包含一个 \(x\) 的区间都满足条件,可以转化为矩形覆盖,最终要求的就是矩形并,扫描线板子。

ABC350G Mediator

并查集维护当前所在树的根,以及每个点的父亲。每次连边类似启发式合并,重构 \(siz\) 较小的树。询问则只有三种情况。

ABC353G Merchant Takahashi

\(f_i\) 表示第 \(i\) 次贸易后的最大收益,有转移式:

\[f_i=\max\{f_j+C\times|T_i-T_j|\}+P_i \]

拆绝对值后线段树优化即可。

ABC358G AtCoder Tour

发现最优策略一定是走到某个格子后一直不动,那么只需求出从起点走若干步到某个格子时的价值。设 \(f_{l,i,j}\) 表示从起点走 \(l\) 步后到达 \((i,j)\) 的最大价值,每次向四个方向转移即可。

ABC359G Sum of Tree Distance

虚树板子。也可以用点分治、dsu on tree 或根号分治解决。

ABC360G Suitable Edit for LIS

\(f_i\) 表示以位置 \(i\) 结尾的最长 LIS 长度,\(g_i\) 表示以位置 \(i\) 开头的最长 LIS 长度。枚举修改的位置 \(i\in [2,N-1]\),答案即为 \(\min\{f_{i-1}+g_j\}\),其中要求 \(j\ge i\)\(A_j\ge A_{i-1}+2\)。可以用树状数组优化。对于 \(i\in \{1,N\}\),特殊考虑即可。

ABC362G Count Substring Query

AC 自动机板子。

ABC366G XOR Neighbors

本质上是对于每个二进制位的异或方程组,由于 \(N\le 60\),因此可以强制要求某个点的某个二进制位为 \(1\) 后高斯消元。

ABC368G Add and Multiply Queries

答案不超过 \(10^{18}\),并且有 \(A_i\ge 1\),那么询问的区间中满足 \(B_i\ge 2\) 的至多有 \(\log\) 个。线段树维护 \(\{A_n\}\) 的和,set 维护 \(B_i\ge 2\) 的位置即可。

ABC369G As far as possible

考虑 \(k\rightarrow k+1\) 的过程,实际上是在未选的边里面选出一条最长的链。因此可以长链剖分后,用大根堆存储划分出的链的长度,贪心的从大往小选即可。

ABC373G No Cross Matching

\(S=\sum_{i=1}^n |P_iQ_{R_i}|\)

\((P_i,Q_k)\)\((P_j,Q_l)\) 存在交点,则可调整为 \((P_i,Q_l)\)\((P_j,Q_k)\),并且 \(S\) 一定减小。换言之,只需考虑 \(S\) 最小的情况。可以使用费用流解决。

ABC375G Road Blocked 2

先求出 \(dis(1,u)\)\(dis(u,n)\),保留所有 \(dis(0,u)+dis(1,v)+w=dis(1,n)\) 的边,求出新图的所有割边即可。

ABC377G Edit to Match

建一棵 Trie,每次分类讨论更新答案即可。

posted @ 2024-09-23 15:20  SpadeA261  阅读(62)  评论(0)    收藏  举报