图论杂项

竞赛图

  • 姑且先挂载在这里。

  • 性质 1:竞赛图缩点所得必为一条链,链上的重构点称为 Tier,Tier 1 是拓扑序最高的。

  • 性质 2:出度最大的点必然在 Tier 1 中。

    • 将所有点分为三类,第一类是出度最大的某个点 \(u\),第二类是被 \(k\) 直接指向的点,第三类是剩余的点。

    • 不妨设存在点 \(v\) 满足 \(v\) 的 Tier 比 \(u\) 更高,于是显然 \(v\) 对前两类点都有出边,于是其出度至少为 \(outdeg_u+1\),与前设矛盾。

  • 性质 3:若 \(T_u\)(Tier 的简写)高于 \(T_v\),则 \(outdeg_u>outdeg_v\)

    • \(u\) 需要对 \(T_v,T_{v+1},\dots\) 中每个点都有出边,而 \(v\) 至多对它们中除了 \(v\) 本身的点有出边,故 \(outdeg_u\geqslant outdeg_v+1\)

    • 这事实上代表着,将每个 Tier 中的点的出度视为一个数轴上的区间,则它们是不交的。

CF1779E

  • 题意:给定一张 \(n\) 个点的竞赛图,允许做至多 \(2n\) 次形如 \(i,S\) 的询问,返回值为 \(i\)\(S\) 的出度。求 Tier 1。

  • 数据范围:\(n\leqslant 250\)。自适应交互库。

  • 根据性质 2,我们先问一遍 \(i,all\),求得出度。然后将点按照 \(outdeg\) 不增排序,则第一个点必然在 Tier 1 中。

  • 根据性质 3,我们知道 Tier 1 对应的一定是排序后前缀的一段点。

  • 按这个顺序继续考虑后面的点,询问 \(i,T_1\),若结果不为 \(0\),则 \(T_1=[1,i]\)

  • 总询问次数为 \(2n-1\),足够通过本题。但出题人还留了一个 Bonus,只允许 \(n-1\) 次询问,怎么做?

排列,置换与对换环

  • 我是真没地方放啊...这里对换环才是写这个的目的,排列和置换是为了这点醋包的饺子。

排列

  • \(1\sim n\) 的排列是由 \(1\sim n\) 构成的一个有序序列。

  • 形式化地,\(1\sim n\) 的排列是一个序列 \(a_{1\sim n}\),满足 \(\forall i\in [i,n],a_i\in [1,n]\),且 \(\forall i\neq j.a_i\neq a_j\)

  • 常用 \(P\)\(p\)(permulation 的缩写)表示排列。如无特殊说明,下面提到的排列都是 \(1\sim n\) 的排列。

逆序

  • 一个排列 \(P\) 的逆序指的是满足 \(i<j \And P_i>P_j\)\((i,j)\) 对。逆序数即为排列的逆序数量。

  • 逆序数可能是奇数也可能是偶数。对应的排列分别称为奇排列和偶排列。

对换

  • 一个排列 \(P\) 的对换指的是将 \(P_i,P_j\) 交换,其他数保持不动的操作,记为 \((i,j)\)

  • 定理 1:若从 \((i,j)\) 之前的 \(P\) 向之后的 \(P\) 连边,则所有 \(P\) 构成一个强连通分量。

    • 注意到命题等价于任意两个排列可达,考虑对其给出构造证明:

    • 记起始排列为 \(S\),目标排列为 \(T\),对于 \(i=1\sim n\),进行 \((i,pos_i)\) 的对换,这里 \(pos_i\) 表示当前排列中 \(i\) 的位置。

  • 定理 2:所有对换都改变排列的奇偶性。

    • 不妨设 \(i<j,|[i+1,j-1]|=len\)

    • 首先考虑 \([i+1,j-1]\)\(i\) 的关系。一共构成了 \(2len\) 个对,设其中有 \(x\) 个与 \(i\) 构成逆序,\(y\) 个与 \(j\) 构成逆序,则对换后有 \(2len-x-y\) 个为逆序,又原有 \(x+y\) 个逆序,故此部分的逆序变化量为 \(2(len-x-y)\equiv 0\pmod{2}\)

    • \(i,j\) 的交换一定导致 \((i,j)\) 从逆序变为正序或者从正序变为逆序,即这部分的逆序变化量为 \(1\pmod{2}\)

    • 综上,总逆序变化量为 \(1\pmod{2}\),故排列的奇偶性一定改变。

  • 定理 3:OI Wiki 在狗叫什么?

  • Tips:为什么使用图论方法来研究对换?

    • 考虑图的定义:元素和元素的二元关系。

    • 注意到 \((i,p_i)\) 显然是元素,交换其 \(p_i\) 显然是关系且是二元的,所以其适合用图论方法描述。

    • 故从图论方法出发,可能会得到不错的性质。

置换

  • 一个有限集合 \(S\) 到自身的双射称为置换。

  • 形式化地,\(S\) 的一个置换是(记 \(|S|=n\)

\[f= \begin{pmatrix} S_1,S_2,\dots,S_n \\ S_{p_1},S_{p_2},\dots,S_{p_n} \end{pmatrix} \]

置换乘法与置换群

  • 对于两个置换 \(f=\begin{pmatrix} S_1,S_2,\dots,S_n \\ S_{p_1},S_{p_2},\dots,S_{p_n} \end{pmatrix}\)\(g=\begin{pmatrix} S_1,S_2,\dots,S_n \\ S_{q_1},S_{q_2},\dots,S_{q_n} \end{pmatrix}\),两者的乘积为 \(f\circ g=\begin{pmatrix} S_1,S_2,\dots,S_n \\ S_{q_{p_1}},S_{q_{p_2}},\dots,S_{q_{p_n}} \end{pmatrix}\)

  • 应当指出的是,集合内的元素是无序的,上面的写法都是为了方便书写。如果保证第一行是 \(S_1\sim S_n\) 的话,也可以略去第一行(第一行的存在就是为了方便书写)。

  • 可以证明,集合 \(S\) 的所有置换和定义于其上的置换乘法构成群,称其为置换群。置换群是研究“本质不同方案数”的有力工具,但我们这里不要管它,以后再说,因为要学这个真的需要认真学群论。

  • 一般略去排列的置换的上一行,默认其为 \(1\sim n\)。事实上,可以将一个序列视为一个置换 \(f=\begin{pmatrix} 1,2,\dots,n \\ a_1,a_2,\dots,a_n \end{pmatrix}\),其也可以参与置换乘法。

  • 对于乘 \(f^k\) 的问题,虽然我们可以利用置换的结合性做快速幂,但没有必要:建出所有置换环之后将每个元素在其上走 \(k\bmod len\) 步就可以了,其中 \(k\) 为次数。

对换环

  • 我们考虑一个简单的问题:用最少次数的对换使得排列 \(P\) 中不存在逆序。

  • 考虑对换的定理 1 中的构造证明,不妨连边 \(pos_i\to i\),注意到每个点的入度和出度都是 \(1\),故整幅图为一个简单环或多个简单环的并。

  • 不考虑自环,其余所有边显然都是“有效对换”,即其至少使一个 \(P_i=i\)。考察这些对换的发生对于对换环的影响:

    • 记该边的起点为 \(u\),终点为 \(v\)。则对换后 \(p_v'=v\)\(p_u'=p_v\)

    • 不妨记 \(v\) 发出的边的终点为 \(w\),显然 \(p_u'=p_v=w\) 还是希望回到 \(w\) 处。

    • 于是,\(u,v,w\) 的关系从 \(u\to v\to w\) 变成了 \(u\to w\),即 \(u\to v\) 的边和 \(v\to w\) 的边合并为一条边,本次对换的边 \((u,v)\) 的终点 \(v\) 在对换环上消失了(事实上是成为了自环 \(v\to v\))。可以认为,一次这样的对换就是拆了一条边,踢了一个点出去。

    • 应当指出的是,当对换环大小为 \(2\) 时,\(w=u\),于是此时 \(p_u'=p_v=w=u\),其是正确的,即一个对换环上的最后一次交换将两条边拆掉,踢出了两个点。

    • 故将一个对换环内部对换到正确所需的次数为 \(len-1\),这里 \(len\) 为环长。

CF1768D Lucky Permutation

  • 题意:求将排列 \(P\) 对换到恰有一个逆序的最少对换次数。

  • 数据范围:\(n\leqslant 2\times 10^5\)

  • 注意到恰有一个逆序的排列就是一个升序排列的某两个邻项交换一下,只有 \(n-1\) 种。由此可以推出一个显然的上界:\(\sum\limits_{i=1}^m (len_i-1)+1\),这里 \(m\) 为对换环数量,即对换到升序再随便对换一个。

  • 考察这些单逆序排列的对换环,发现它们的对换环是 \(n-2\) 个自环和一个相邻的二元环。嗯?那如果我们能够在对换过程中做一点调整,将一个对换环变成一个相邻二元环然后不处理它...

  • 那么我们就得到一个 \(\sum\limits_{i=1}^m (len_i-1)-1\) 的解。关键问题是,怎么把一个对换环变成相邻二元环,且不付出额外的对换次数?

  • 首先该对换环中需要有相邻的位置(位置和元素同步出现)。我们希望把 \(v=i\) 换到 \(i+1\),反之亦然。

  • 简单模拟发现有一个很关键的性质就是 \(i,i+1\) 相邻。因为对换环是简单环,事实上 \(i,i+1\) 两个点可以把整个环分为左部和右部。

  • 注意到 \(i\)\(v=i\) 一定直接相连,故如果 \(i,i+1\) 在同部,一定没机会,因为过不了这堵墙,绕不到对面去。

  • 然而这是不可能的:对换环是一个有向环,若 \(i,i+1\) 在同部,则其显然不是环,简单画图可得。

  • 于是问题变成是否存在一个对换环,其内有相邻点。\(O(n)\) 容易解决。

posted @ 2023-02-08 13:56  未欣  阅读(12)  评论(0编辑  收藏  举报