非常规trick记录

posted on 2024-12-16 05:08:36 | under | source

upd on 2026:以前的 trick 汇总,之后应该都以分散的形式出现。

闲话

noip 考前突然发现缺少对技巧的总结,这不好。

正文

竞赛图缩点成链

  • 竞赛图(基图为完全图的有向图)缩点后得到一条有向链。证明的话考虑归纳即可,逐个将点加入。

应用:有 \(n\) 个人,\(3\) 种场地,给出每个人在各个场地的排名。你可以任意选取两人并规定它们某个场地比赛,求第 \(x\) 个人可否取胜。\(q\) 次操作,带修,每次调换某个场地两人的排名。\(n,q\le 2e5\)

\(x\) 可在某个场地击败 \(y\),则 \(x\to y\) 连边。\(x\) 可获胜等价于可从 \(x\) 开始遍历所有点。缩点,由结论知 \(x\) 获胜等价于 \(x\) 为与链头强连通分量。

题目强调了排名,不妨从此入手。手玩发现:将三个场地的人按排名先后列出来,则构成若干循环(即三个序列该区间内出现的数都一样),两点属于一个分量等价于属于同一循环。

考虑证明:

  1. 分量 \(\to\) 循环:链上先后两个不同分量 \(X,Y\)\(\forall x\in X,y\in Y\),一定满足三个序列中 \(x\) 先于 \(y\) 出现。即 \(X,Y\) 中的点处于不同循环。
  2. 循环 \(\to\) 分量:显然不同循环的点不可能在同一分量。

如何维护?让不同序列相同元素连边,那么循环实际上是划分,一个划分满足不被任何连边经过。这个转化可以借鉴。然后线段树即可,复杂度 \(O(q\log n)\)

有向图计数

  • 对于统计有向图方案数相关的问题,可以转化为对拓扑序计数,即每次剥一层叶子 \(T\)\(T\) 必须是独立集。当然实际难以让 \(T\) 恰好是叶子集合,只能钦定,所以要容斥,容斥系数为 \((-1)^{|T|+1}\)

应用:给有向图图定向使其无环,求方案需改变方向的边的数量之和。\(n\le 18,m\le \frac {n(n-1)}2\)

注意到若 \(S\) 无环则其反图也无环,且两者需改变方向的数之和恰为 \(m\),所以答案就是定向方案数乘以 \(\frac m2\)

MST 边权和与连通分量个数的关系

  • \(k\) 为值域,\(G_k\) 为将 \(<k\) 的边全部加入后的图,\(|c(G_k)|\)\(G_k\) 连通分量的数量,我们有:

\[\sum\limits_{e\in MST} w=\sum\limits_{i=1}^k |c(G_k)| \]

于是就能转换视角,将难以处理的 MST 边权和转化为连通分量问题。更好的是,\(|c(G_k)|\) 这个东西可单独考虑每个连通分量的贡献。

应用:ABC386G。

连通分量计数

  • 容斥,连通分量等于所有情况减去不连通情况,对于不连通情况,可以固定一个点 \(x\),然后分为两部分:与 \(x\) 连通的部分、不与 \(x\) 连通的部分,前半部分递推求解、后半部分同“所有情况”的处理。

应用:ABC213G。

区间与二维点的转化

  • 将区间 \([l,r]\) 视为坐标系上一点 \((l,r)\),有时区间相关的限制可转化为矩形,那么扫描线即可解决。

应用:ABC360F。

无向图包含某个点的最小环

  • 以其为根,建最短路径树,发现最小环至多经过一条非树边,可以反证法证明。枚举即可。

在线求区间 mex

  • 法一:扫描线扫到 \(r\),线段树维护每个元素的最后出现位置,询问线段树二分即可。可以可持久化做到在线。\(O(n\log n)\)
  • 法二:还是扫描线,线段树 \(i\) 位置表示 \(mex(i,r)\),显然有单调性,看成若干颜色段。新增 \(a_{r+1}\),那么 \(a_{r+1}\) 颜色段 \([L,R]\) 至少会加一。然后再找此前该颜色段 \(a_{r+1}+1\) 的最后出现位置 \(pos\),那么 \([L,pos]\) 至少加一,以此类推。注意最后可能会和前面的区间合并一次,那么颜色段均摊就是 \(O(n\log n)\) 的。

貌似法二比较有前途。

mex 极小区间数量线性

  • 定义一个区间极小,当且仅当不存在子区间 \([l,r]\in [L,R]\) 满足 \(mex(l,r)=mex(L,R)\)。则这种区间数量 \(O(n)\)。具体来说,上界 \(2n\)

怎么优雅求出来呢?考虑一个极小 k-mex 区间 \([L,R]\),不可能 \(a_L=a_R\),不失一般性地假设 \(a_L>a_R\)。显然 \(mex(L+1,R)=a_L\),记它的一个极小区间为 \([l,r]\in [L+1,R]\),因为 \([L+1,R-1]\) 不含 \(a_R\) 所以 \(r=R\)

于是发现,一个 k-mex 极小区间必然从一个 p-mex 区间向一端拓展到第一个 \(a=p\) 的位置得到。

然后考虑按 \(mex\) 从小到大依次处理,已经处理了 \(mex=1\dots k\),让这些区间按刚刚的方式拓展,那么得到 k-mex 的一些候选区间,去重即可。求区间 \(mex\) 可以做到在线 \(O(\log n)\),所以是 \(O(n\log n)\)

应用:套娃。对于一个k-mex 极小区间 \([l,r]\),找到极大区间 \((L,R)\)\(L,R\) 分别是两端走第一个 \(a=k\)。那么 \(len\in [r-l+1,R-L-1]\)\(mex\) 均为 \(k\)。然后差分,用 set 暴力求出答案。

数连通块

有两大思想:

  • 树上问题:连通块数量为点数减边数。这个应该有很多例题。
  • 保留有限信息:例如寻找代表元、删减无用边。比方说 P7126 [Ynoi2008] rdCcot

仅供参考,应当灵活多变。

范德蒙德卷积

\[\sum\limits_{i=0}^n {n\choose i}{m\choose {k-i}}={n+m\choose k} \]

容易组合意义证明,将两堆 \(n,m\) 的小球排起来,\(\rm LHS\) 就是分别选总共 \(k\) 个,\(\rm RHS\) 就是一起选 \(k\) 个。

普通幂转下降幂(第二类斯特林数)

\[x^n=\sum\limits_{i=1}^x S(n,i)x^{\underline i} \]

或写作:

\[x^n=\sum\limits_{i=1}^x {x\choose i}S(n,i)i! \]

证明考虑 \(x^n\) 的组合意义:\(n\)\(x\) 列矩阵,每列选一个。然后枚举 \(i\) 行被选,\(S(n,i)\) 先划分集合,组合数选取行,阶乘将集合与行匹配。

posted @ 2026-01-14 17:57  Zwi  阅读(0)  评论(0)    收藏  举报