对于一个两边各有
n
n
n个点的二分图的左边一个点集
A
A
A,定义
F
(
A
)
F(A)
F(A)为右边至少和
A
A
A中的一个点相邻的点的集合。
给定一个
K
K
K,要求构造一个二分图,使得对于所有点集
A
A
A,
∣
F
(
A
)
∣
<
∣
A
∣
|F(A)|<|A|
∣F(A)∣<∣A∣有恰好
K
K
K次成立。
Data Constraint
n
≤
32
,
K
∈
[
0
,
2
n
]
n≤32,K\in[0,2^n]
n≤32,K∈[0,2n]。
Solution
对于左边的点,假定第
i
i
i个连向的点完全包含第
i
−
1
i-1
i−1个连向的点,且
d
i
−
d
i
−
1
≤
1
d_i-d_{i-1}≤1
di−di−1≤1(
d
i
d_i
di表示左边点
i
i
i的度数),则我们有一个结论:
对于一种方案,将其
d
1
∼
d
n
d_1\sim d_n
d1∼dn压缩成一个二进制数
(
d
n
d
n
−
1
d
n
−
2
…
…
d
1
)
2
(d_nd_{n-1}d_{n-2}……d_1)_2
(dndn−1dn−2……d1)2;然后将这些数按1的个数为第一关键字从少到多、按大小为第二关键字从大到小排序,则最后某个数的序号即为该方案的
∣
F
(
A
)
∣
≥
∣
A
∣
|F(A)|≥|A|
∣F(A)∣≥∣A∣成立次数(记为
c
n
t
cnt
cnt)。
考虑证明上述结论。
对于一种方案,记
B
x
B_x
Bx为某个满足
d
i
−
1
=
d
i
−
1
d_i-1=d_{i-1}
di−1=di−1的
i
i
i(包括1),则有
B
(
1
,
2
,
…
…
,
m
)
B(_{1,2,……,m})
B(1,2,……,m)(
m
m
m为不同的度数个数)。若不考虑空集,则:
c
n
t
=
∑
i
=
1
n
∑
j
=
1
d
i
(
i
−
1
j
−
1
)
=
∑
i
=
1
m
(
n
i
)
−
(
B
i
−
1
i
)
cnt=\sum_{i=1}^n\sum_{j=1}^{d_i}\begin{pmatrix} i-1 \\ j-1 \\ \end{pmatrix}=\sum_{i=1}^m\begin{pmatrix} n \\ i \\ \end{pmatrix}-\begin{pmatrix} B_i-1 \\ i \\ \end{pmatrix}
cnt=i=1∑nj=1∑di(i−1j−1)=i=1∑m(ni)−(Bi−1i)
那么比如有一种方案
(
0100
)
2
(0100)_2
(0100)2,我们将其中的1右移一位变成
(
0010
)
2
(0010)_2
(0010)2,其实相当于令
d
2
d_2
d2++,则根据左式
c
n
t
cnt
cnt++。也就是说,对于一种方案的二进制数,若其中的1不全在最右,则我们必能右移某一个1使其
c
n
t
cnt
cnt++。