一些构造题
1
构造一个 \(n\) 个点 \(m\) 条边的有向图,满足以 \(n\) 为根的外向生成树恰好为 \(C\)。
令 \(n\) 满足 \(n\ge\left\lfloor\log_2 C\right\rfloor+2\),先建立一个底图。对于 \(1\le i\le n-2\),连接 \(\left(i,i+1\right) \left(n-1,i\right)\),并连接 \(\left(n-1,1\right)\)(即 \(\left(n-1,1\right)\) 之间有两条边)
将 \(C\) 二进制分解,如果需要 \(2^{k-1}\) 则断开 \(\left(n-1,k\right)\) 并连接 \(\left(n,k\right)\)。
可以发现与 \(n\) 相连的最大编号点为 \(k\) 的方案数恰好为 \(2^{k-1}\)。
2
构造 \(2n-1\) 个不交匹配覆盖一个 \(2n\) 个点的完全图。
将点和匹配从 \(0\) 开始编号,\(x,y\) 之间的边在第 \(\left(x+y\right)\bmod\left(2n-1\right)\) 个匹配中出现,\(x,2n-1\) 之间的边在第 \(2x\bmod\left(2n-1\right)\) 个匹配中出现。
3
构造一个大小为 \(n\times n\) 的矩阵,满足每个位置值在 \(\left[1,m\right]\) 之间,且每个位置有 \(m-n\) 个值不能选,要求同行或同列元素不同。
每个位置赋权值 \(v_{i,j}=\left(i-j\right)\bmod n\),每一行 \(v\) 越大优先级越高,每一列 \(v\) 越小优先级越高,跑 \(m\) 次稳定婚姻即可。
容易发现每一个位置所在行列优先级比它高的恰好有 \(n-1\) 个,因此一定在某一轮中被匹配。
4
给定 \(n\) 阶排列 \(p\)。
定义一个长度为 \(n\) 的序列 \(A\) 是合法序列当且仅当对于 \(A\) 的任意连续子区间 \(\left[l,r\right]\),以下两个条件满足至少一个:
- \(\forall i\in \left[l,r\right], A_i=0\)
- \(\exists i\in \left[l,r\right], A_i\ne 0\land \forall j\in \left[l,r\right]\land j\ne i, A_j\ne A_i\)
有一个初始全部为 \(0\) 的 \(A\),你需要构造长度为 \(n\) 的数组 \(f\),每次操作令 \(A_{p_i}=f_{p_i}\),要求每次操作后 \(A\) 都是合法序列。
构造 \(f\) 使得 \(\max\left\{f_i\right\}\) 尽量小。
-
solution 1
手摸可知 \(n=4\) 时可以保证 \(\max\left\{f_i\right\}\le 3\)。
递归构造。对于 \(p\),按下标三个一组,找出出现时间最早的一个,依次拼接组成新的序列,递归构造,再用额外的三个数把空隙填满即可。\(\max\left\{f_i\right\}=3k+1\) 时可以构造所有 \(n\le 4\times 3^k\) 的情况。 -
solution 2
从右到左,如果 \(i\) 没有被标记则令 \(f_i=1\) 并且把小于 \(i\) 的数中值比 \(p_i\) 大的最小的数和比 \(p_i\) 小的最大的数标记。然后扔掉已经填好的数并且递归做即可。设 \(\max\left\{f_i\right\}=k\) 时可以构造的 \(n\in\left[1,F_k\right]\),则 \(\left\lfloor\frac{2F_k}{3}\right\rfloor=F_{k-1}\)。
5
给 \(n\) 阶完全图的每条边染成 \(m\) 种颜色中的一个,使得不存在同色三元环。构造最小的 \(m\)。\(n\in \left[1,50\right]\cup\left[66,155\right]\cup\left[327,481\right]\)。
设 \(f_m\) 表示 \(m\) 种颜色可以合法染色的最大完全图的阶。
首先一个点连出去的相同颜色的边数必须不大于 \(f_{m-1}\),所以得到 \(f_m\le mf_{m-1}+1\)。可以得到 \(f_0=1,f_1=2,f_2\le 5,f_3\le 16,f_4\le 65,f_5\le 326,f_6\le 1957\)。
下面的构造可以证明 \(f_2=5,\forall i\ge 3,f_i\left(i\right)\ge 3f_{i-1}+f_{i-3}\)。
对于 \(1\le i,j\le n,i\ne j\),设 \(\operatorname{color}_{i,j}\) 表示 \(\left(i,j\right)\) 这条边的颜色。若 \(i=j\) 则令 \(\operatorname{color}_{i,j}=0\)。
对于 \(n=5\) 的情况,可以令 \(\lvert i-j\rvert\in\left\{1,4\right\}\) 时 \(\operatorname{color}_{i,j}=1\),否则 \(\operatorname{color}_{i,j}=2\)。所以 \(f_2=5\)。
令颜色集 \(C\) 为 \(\left\{0,1,\dots,m\right\}\),并且让对角线上 \(\operatorname{color}\) 值均为颜色集的第一个元素。这样只需要构造出来的 \(\operatorname{color}\) 矩阵满足 不存在 \(i,j,k\) 使得 \(\operatorname{color}_{i,j}=\operatorname{color}_{j,k}=\operatorname{color}_{k,i}\) 且 \(\operatorname{color}_{i,j}=\operatorname{j,i}\) 就一定满足条件。
设以 \(C\) 为颜色集构造出的矩阵为 \(T\left(C\right)\),取出前 \(4\) 个颜色,设分别是 \(a,b,c,d\),设 \(C'=C\setminus\left\{a,b,c,d\right\}\),则构造 \(\operatorname{color}\) 矩阵为
可以证明图中没有同色三元环。
因此 \(f_2=5,f_3=16,f_4\ge 50,f_5\ge 155,f_6\ge 481\)。
6
给一个简单无向图,定义 \(A_i\) 表示第 \(i\) 个点的权值,\(B_{u,v}\) 表示边 \(\left(u,v\right)\) 的权值,\(val_i=A_i+\sum\limits_{\left(i,j\right)\in E}B_{i,j}\),要求构造 \(A\) 和 \(B\),使得如果 \(\left(u,v\right)\in E\),则 \(val_i\ne val_j\)。\(A_i\in\left\{0,1\right\},B_i\in\left\{0,1,2\right\}\)。
增量法构造。设当前加入第 \(i\) 个点,设 \(j\lt i\) 且 \(\left(i,j\right)\in E\),可以发现这两种操作不影响前 \(i-1\) 个点的权值:
- \(A'_j\leftarrow A_j-1,B'_{i,j}\leftarrow B_{i,j}+1\)
- \(A'_j\leftarrow A_j+1,B'_{i,j}\leftarrow B_{i,j}-1\)
令每条边初始权值为 \(1\)。对于 \(1\le j\lt i\),若 \(\left(i,j\right)\in E\) 且 \(A_j=0\),先进行 \(2\) 操作。然后每个 \(j\) 都能进行 \(1\) 操作,这样 \(i\) 的权值可以减少 \(\left[0,deg_i\right]\) 中的任意值,显然可以调整使得不与任意一个 \(j\) 权值相同。