做题记录 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)\)

代码


list

\(\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\)

转移为

\[f_{i,j}=\sum_{t=1}^{\min(i,k)} f_{i-t,j-1} \binom{i-1}{t-1} fc_t \]

\[g_i=\sum_{t=2}^{\min(i,k)} g_{i-t}\binom{i-1}{t-1} fc_{t-1} \]

时间复杂度 \(O(n^3)\)

代码

posted @ 2025-02-02 09:15  Hstry  阅读(10)  评论(0)    收藏  举报