abc231-solution-post
ABC231 Solution
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 就是
要求的即为
\(\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,建模)
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号