jzoj6233

题意

你需要构造一个(n)个点的二分图
定义(F(A))表示左部点集(A)能够到达的右部中的点
使得满足 (F(A)<|A|) 的集合恰好有 (k)
(1≤n≤32 , 0≤k≤2^n)

做法

显然(k=2^n)时无解
反过来考虑(|F(A)|ge |A|)

结论1:强制(F_{i} subset F_{i+1}),记(d_i=|F_i|),强制(d_i-d_{i-1}=0~or~1),令(B={x|d_x-d_{x-1}=1}),设(|B|=m),则满足(|F(A)|ge |A|)的子集个数为(sumlimits_{i=1}^m {nchoose i}-{B_i-1choose i})(不考虑空集)

证明:
这里证明(B_1=1)的,然后(B_1)等于其他数的大体过程也是下面这样,但有些细节不同
(egin{aligned}\ F&=sumlimits_{i=1}^n sumlimits_{j=1}^{d_i}{i-1choose j-1}\ &=sumlimits_{k=1}^m sumlimits_{i=B_k}^{B_{k+1}-1}sumlimits_{j=1}^k {i-1choose j-1}\ &=sumlimits_{k=1}^m sumlimits_{j=1}^k sumlimits_{i=B_k}^{B_{k+1}-1}{i-1choose j-1}\ &={B_2-1choose 1}+sumlimits_{k=2}^m sumlimits_{j=1}^k {B_{k+1}-1choose j}-{B_k-1choose j}\ &=sumlimits_{i=1}^m {nchoose i}+sumlimits_{k=2}^m sumlimits_{j=1}^k -{B_k-1choose j}+sumlimits_{j=1}^{k-1}{B_k-1choose j}\ &=sumlimits_{i=1}^m {nchoose i}-{B_i-1choose i}\ end{aligned})

结论2:将(d_i-d_{i-1})写成二进制的形式,(d_1-0)为最低位,(d_{n}-d_{n-1})为最高位。将这些数二进制中(1)的个数为第一关键字,大小为第二关键字,第一关键字升序排,第二关键字降序,那么这个数的排名就是(|F(A)|ge |A|)的子集个数

证明:
((1))(1)个数不同
(F_{m+1} - F_{m} ge {nchoose m+1}-({nchoose m+1}-{n-m-2choose 0})={n-m-2choose 0}ge 1)
((2))(1)个数相同
((1))类似

利用结论2随便搞一下就好了

题外话

公式细节好多啊...
结论(2)的弱化版就是二进制与(k)是一一对应的,不是很懂,哪位大佬知道在下面说一下吧

原文地址:https://www.cnblogs.com/Grice/p/12663620.html