zoukankan      html  css  js  c++  java
  • 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)是一一对应的,不是很懂,哪位大佬知道在下面说一下吧

  • 相关阅读:
    Url中文传值乱码、编码转码问题总结
    简单介绍下我使用了一年多还不知道的Sql server 2005 组件知识
    一次管理项目小组网络的经历(使用RouterOS与Wireshark破解adsl上网密码,使用isa与Bandwidth Splitter来协调带宽)
    asp.net异步处理机制研究
    注释的力量
    AutoMapper简明教程(学习笔记)
    seajs学习笔记
    Hifi入门
    fxcop使用DataFlowRules规则集
    Visual Studio编译选项简介
  • 原文地址:https://www.cnblogs.com/Grice/p/12663620.html
Copyright © 2011-2022 走看看