做题记录 26.2.14
\(\textcolor{black}\odot\) P10104 [GDKOI2023 提高组] 异或图
先考虑 \(m=0\) 的情况
令 \(C(a_{1\sim n})\) 为 \(b_{1\sim n}\mid b_i\le a_i,\bigoplus b_i=0\) 的数量
对于 \(c=0\) 的情况转化为求 \(C(a_{1\sim n})\),否则转化为求 \(C(a_{1\sim n}:c)-C(a_{1\sim n}:(c-1))\),其中 \(:\) 表示追加
因此考虑如何计算 \(C\)
令 \(v[x]\) 表示 \(v\) 的第 \(x\) 位
令 \(d_i=a_i-b_i\),考虑枚举 \(\max d_i\) 的最高位为第 \(x\) 位(\(b=a\) 的情况特判即可)
若 \(a\) 的 \(x\) 位以上部分的异或和不为 \(0\) 则无贡献,跳过
否则设 \(a\) 的 \(x\) 位及以下部分为 \(a'\),需要选择偶数个 \(a'_i\)(显然不能全选)满足 \(a'_i[x]=1\) 令 \(b'_i[x]=1\),剩余的 \(b'_i[x]=0\),从没有被选择的 \(a'_i[x]=1\) 中固定一个,非固定的 \(a'\) \(0\sim x-1\) 位任意填,固定的 \(a'\) 可以将低位的异或和调到 \(0\)
容易 \(dp\) 做到 \(O(n\log V)\)
然后考虑 \(m>0\) 的情况
枚举边子集 \(E'\),对于 \(E'\) 产生的一个连通块,其中所有点的 \(b\) 相同,求出此时的方案数,容斥系数为 \((-1)^{|E'|}\)
考虑枚举连通块的划分方式,一种划分方式中,大小为偶数的连通块对应方案数为 \(\min a+1\),大小为奇数的连通块只需要保留 \(\min a\),对所有保留的 \(\{a\}\) 求出 \(C(a)\) 后乘以偶数连通块的贡献即为总方案数,容斥系数为每个连通块 \(S\subset[1,n]\) 的 \(g_S\) 之积,其中 \(g_S\) 表示点集 \(S\) 的导出子图中选出若干边使 \(S\) 连通的方案数,容易 \(O(3^n)\) 求出 \(g\)
这样可以做到 \(O(B(n)n\log V)\),其中 \(B(n)\) 表示 \(\text{Bell}\) 数
发现答案形如 \(\sum_{S\subset [1,n]} C(\{a_i\mid i\in S\})\times f_S\),其中 \(f_S\) 与 \(C\) 无关,考虑如何计算 \(f\)
对于一种划分方案,对应的 \(S\) 为全体大小为奇数的连通块内 \(a\) 最小的点的集合,对 \(f_S\) 的贡献为每个连通块的 \(g\) 之积乘以偶数连通块的 \(\min a+1\) 之积
考虑从小到大加入 \(a\),\(dp_S\) 中对于已经加入的 \(a_x\),\([x\in S]\) 表示是否令 \(a_x\) 为一个奇连通块的 \(\min a\),对于还没有加入的 \(a_x\),\([x\in S]\) 表示是否已经将 \(a_x\) 加入某一连通块,转移时枚举当前点所在连通块即可
时间复杂度 \(O(n3^n+(m+n\log V)2^n)\)
\(\textcolor{black}\odot\) CF1768F Wonderful Jump
定理 \(1\):最优解中,一次跳跃 \(i\to j\),\(a_{i\sim j}\) 的最小值一定在 \(a_i,a_j\) 之一
证明:若不是,设最小值为 \(k\mid i<k<j\),则 \(i\to k\to j\) 一定不劣
定理 \(2\):对于一次跳跃,若范围内的最小值为 \(a_i\),则跳跃的距离一定不超过 \(\frac n{a_i}\)
证明:若超过,则不如每次跳一步
由此令 \(dp_i\) 表示 \(1\to i\) 的最小代价,枚举 \(a_i\) 为最小值,向前向后分别跳不超过 \(\frac n{a_i}\) 步,若扫到 \(\le a_i\) 的位置则退出
定理 \(3\):此算法时间复杂度为 \(O(n\sqrt n)\)
证明:对于 \(a_i>\sqrt n\) 的部分显然总步数为 \(O(n\sqrt n)\),对于 \(a_i\le \sqrt n\),每个值的总贡献不超过 \(O(n)\),因此总时间复杂度 \(O(n\sqrt n)\)
\(\textcolor{black}\odot\) AT_arc045_d [ARC045D] みんな仲良し高橋君
先对于一个点集判断是否存在完美匹配
对于点 \((x,y)\),连边 \(x^L-y^R\),选择一组匹配相当于删去两条共顶点的边,可以删空则合法
归纳可证合法当且仅当每个连通块边数都是偶数
然后考虑原问题,先建图,转化为对于每条边,判断删去后剩余的每个连通块是否都含偶数条边
若存在两个及以上连通块含有奇数条边则全都不合法
显然至少一个连通块含有奇数条边
若恰好一个连通块含有奇数条边,此连通块外的边必然不合法,连通块内求出任意 \(\text{DFS}\) 生成树,树之外的边必然合法,树上非割边必然合法,树上割边取决于子树中边数的奇偶性
容易做到 \(O(n)\)

浙公网安备 33010602011771号