abc231-solution-post

ABC231 Solution

link


C - Counting 2

可以离线排序,也可以排序直接 lower_bound。


D - Neighbors

首先一个人不可能与超过 \(2\) 人相邻。

检查完这个,每个人的度数都小于等于 \(2\)。我们再检查一下是否有环即可。


E - Minimal payments

从小到大考虑面值。如果现在需要凑 \(x\) 元,\(x\) 的零头一定是有当前最小的面值付的。

例如样例,凑出 \(87\) 要么凑 \(90\) 再用 \(1\) 元凑 \(3\),要么凑 \(80\) 再用 \(1\) 元凑 \(7\)

这样每次只会有两种策略,直接搜即可。


F - Jealous Two

题意就是给两个数组 \(a,b\),求有多少个无序对 \((i,j)\) 满足 \(a_i\le a_j,b_i\ge b_j\)

这个显然直接树状数组二维数点即可。

(*2000,数据结构)


G - Balls in Boxes

这个和 CF891E 是一个题。之前没写推导,来写写吧。

要求 \(n\) 个数的期望乘积,这个难以直接计算。考虑求出所有情况的和最后除以 \(n^k\)

套路地,因为 \(k\) 次操作无序,我们尝试把每个数单独拉出来做 EGF,乘在一起求 \(k\) 次项系数即可。

也就是说,每个数的 EGF \(i\) 次项系数应该是这个数被操作 \(i\) 次后的结果。

那么单个 EGF 就是

\[\begin{aligned} \sum_{i=0}^\infty (b + i)\frac{x^i}{i!} &=\sum_{i=0}^\infty b\frac{x^i}{i!}+\sum_{i=0}^\infty i\frac{x^i}{i!}\\ &=be^x+\sum_{i=0}^\infty \frac{x^i}{(i-1)!}\\ &=(b+x)e^x \end{aligned}\]

要求的即为

\[[x^k]\prod_{i=1}^n(b_i+x)e^x=[x^k]e^{nx}\prod_{i=1}^n(b_i+x) \]

\(\prod\) 右边的直接分治乘,由于乘出来的东西是 \(n\) 次的,\(k\) 次项系数就直接 \(O(n)\) 卷就好了。

(*3000,数学)


H - Minimum Coloring

首先建 \(H\) 个点表示 \(H\) 列,\(W\) 个点表示 \(W\) 行。

然后对于每个白色块,连接它的行和列,边权为这个点的权值。

这样原问题转化为在一个二分图中,找出权值最小的边集,它覆盖了所有点。

考虑网络流,对于原来的每一条边 \((x,y,c)\),建一条 \((x,y)\),流量为 \(1\) 费用为 \(c\)

为了保证每个点都有流量经过,从源点连向所有左部点,流量为 \(1\) 费用为 \(-B\)。这里 \(B\) 是一个很大的数,但不能太大,因为最后要参与计算。

同理所有右部点连向汇点,流量为 \(1\) 费用为 \(-B\)

但是每个点可能被很多条边覆盖,于是到每个点的流量可能不止 \(1\)

为了补充流量,我们从源点连向所有左部点,流量为 \(\infty\) 费用为 \(0\),所有右部点连向汇点,流量为 \(\infty\) 费用为 \(0\)

到这里会出现一个问题,mcmf 是优先算最大流的,于是可能会出现二分图之间的边全部流满的情况。

于是我们加一些从左部点到汇点的边,流量 \(\infty\) 费用 \(0\) 让多余的流量流走即可。

(*2800~3000,建模)

posted @ 2024-02-27 20:20  iorit  阅读(68)  评论(0)    收藏  举报