做题记录 25.2.1
\(\textcolor{purple}\odot\) CF1242C Sum Balance
令 \(S=\sum_{i,j} a_{i,j}\),则最终要令每行的和都为 \(\frac Sk\)(若其不为整数则无解)
令 \(s_i=\sum_j a_{i,j}\),则第 \(i\) 行所需增量为 \(S-s_i\),即对于每个 \(a_{i,j}\),要将其替换为 \(S-s_i+a_{i,j}\) 才能使第 \(i\) 行的总和合法
因此每个 \(a_{i,j}\) 建立一个点,连向 \(S-s_i+a_{i,j}\) 对应点(由题意得每个值对应至多一个点因此每个点出度 \(\le 1\))
用一次 拓扑排序 求出其中所有环,问题转化为 找出若干个环,使得环中点恰好覆盖每一行
先删除包含同一行中节点的环
然后将每个环压为 \(k\) 位二进制数,每一位分别表示环中是否包含该行的节点
转化为选择若干长为 \(k\) 的二进制数,满足任意两数按位与为 \(0\),所有数按位或为全集
考虑 \(dp\),当子集 \(i\) 可拆分时,令 \(f_i\) 表示某一拆分方案中第一个数的下标,否则令 \(f_i=0\)
可枚举子集求出,时间复杂度 \(O(3^k)\)
总时间复杂度 \(O(\sum n + 3^k)\)
\(\textcolor{purple}\odot\) CF1842F Tenzing and Tree
对于一种选择方式,令 \(p\) 为黑点的重心(即黑点权值为 \(1\),白点权值为 \(0\) 的带权重心),令 \(sz_i\) 表示以 \(p\) 为根时节点 \(i\) 子树内黑点数量,令 \(fa_i\) 表示以 \(p\) 为根时节点 \(i\) 的父亲
则对于 \(i\ne p\),边 \(i-fa_i\) 的权值为 \(|sz_i-(k-sz_i)|=|2sz_i-k|\)
由于 \(p\) 为重心,可得对于 \(i\ne p\),\(2sz_i\le k\),因此边 \(i-fa_i\) 的权值为 \(k-2sz_i\),所有边的总权值为 \((n-1)k-2\sum_{i\ne p} sz_i\)
考虑最小化 \(\sum_{i\ne p} sz_i\)
若将点 \(u\)(\(u\ne p\))由白点变为黑点,则 \(u\) 到 \(p\) 的链上所有点的 \(sz\) 都加一,\(\sum_{i\ne p} sz_i\) 会增加 \(dep_u-1\),其中 \(dep_p=1\)
要使 \(\sum_{i\ne p}\) 最小,需要选择 \(dep\) 最小的 \(k\) 个点(含 \(p\))
因此枚举 \(p\),将 \(dep\) 排序,然后用前 \(k\) 小 \(dep-1\) 之和跟新答案
总时间复杂度 \(O(n^2)\)
\(\textcolor{purple}\odot\) P2565 [SCOI2009] 骰子的学问
建立 \(n\) 个点,\(i\) 向 \(a_i\) 连边,构成内向基环树森林
因此分为环和树两部分考虑,对于树的部分,若 \(u\) 连向 \(v\),则令骰子 \(u\) 中所有值大于 \(v\) 中所有值即可
关键在于处理环的情况
假设有一个 \(p\) 点的环,环上点分别为 \(s_{1\sim p}\),令 \(v_{i,j}\) 表示骰子 \(s_i\) 的第 \(j\) 个数字,则一种构造方式为:令 \(v_{1\sim p,1}\gets (1\sim p)\),令 \(v_{1\sim p,2}\gets 2p+(p+1\sim 2p-1)\)(此处圆括号外的 \(+\) 为序列并),以此类推
特判 \(p=3\) 且 \(m=4\) 的情况
填完之后检验一遍是否合法即可
时间复杂度 \(O(nm)\)
\(\textcolor{purple}\odot\) [ABC180F] Unbranched
显然答案等于 最大联通块大小 \(\le k\) 的方案数 减去 最大联通块大小 \(\le k-1\) 的方案数
有题意可得合法的图每个联通块为链或至少两个点的环
因此问题拆分为两个形如 链和环构成的 \(n\) 点 \(m\) 边,最大联通块 \(\le k\) 的图的数量 的子问题
显然有 \(n-m\) 条链
枚举 \(1\le i\le n\),选择 \(i\) 个点组成 \(n-m\) 条链,剩下 \(n-i\) 个点组成若干环
令 \(f_{i,j}\) 为 \(i\) 个有标号点组成 \(j\) 条链的方案数,\(g_i\) 为 \(i\) 个有标号点组成若干大小 \(>1\) 的环的方案数,则答案为 \(\sum_{i=1}^n \binom ni f_{i,n-m} g_{n-i}\)
令 \(fc_i=i!(i>1)\),\(fc_1=1\)
则 \(f_{0,0}=1,g_0=1\)
转移为
时间复杂度 \(O(n^3)\)

浙公网安备 33010602011771号