zoukankan      html  css  js  c++  java
  • ABC220H

    考虑折半,将点按照标号是否 (le frac{n}{2}) 分成两个集合 (S_1, S_2)

    首先原问题的形式有点奇怪,我们不妨统计没有被覆盖覆盖的边为偶数条的情况。

    这样一来问题转化为白点 导出子图 的边数为偶数的情况,这与原问题等价。

    考虑 (S_1, S_2) 中怎样的两个集合合并是合法的,形式化地,有:

    (f_S(S subseteq S_1))(S) 这个集合导出子图边数的奇偶性,类似地定义 (g_T(T subseteq S_2)),同时令 (E_{S, T}(S subseteq S_1, T subseteq S_2)) 为左部集合 (S) 到右部集合 (T) 的边数奇偶性,那么 (S, T) 合并合法当且仅当:

    [f_S oplus E_{S, T} oplus g_T = 0 ]

    直接这样判定很没有前途,因为 (E) 的总量已经达到了 (2 ^ n) 级别,因此考虑转移判定方式。

    (p_S(S subseteq S_1))(S_2) 中与 (S) 连边为奇数的点构成的点集,那么判定条件可以改写为:

    [f_S oplus ((p_S & T) & 1) oplus g_T = 0 ]

    注意到中间部分很特殊,于是我们考虑固定中间部分,统计:

    [h_Q = sumlimits_{p_S & T = Q} f_S oplus g_T ]

    即可 (mathcal{O}(2 ^ {n / 2})) 计算答案。

    注意到上式形式与与卷积非常类似,考虑将其转化为与卷积的形式。

    枚举 (f_S = pf, g_T = pg),令 (vf_Q = sumlimits_{p_S = Q} [f_S = pf], vg_Q = [g_Q = pg]),那么有 (f_S = pf, g_T = pg) 时对 (h) 的贡献:

    [h_Q = sumlimits_{S & T = Q} vf_S imes vg_T ]

    直接做与卷积即可,复杂度 (mathcal{O}(n2 ^ {n / 2}))

    GO!
  • 相关阅读:
    发现维护的自己编写linux 系统检查脚本一个bug (syslog\message)
    循环while for
    字面量(常量)和变量的区别
    网页配色方法
    Dedecms v5.7 CKEditor编辑器回车键换行改为分段
    JS控制密码框获取焦点时文字消失,失去焦点时文字出现
    JS实现选项卡
    JS实现全选、不选、反选
    JS点击显示隐藏内容
    ASP连接MSSQL代码
  • 原文地址:https://www.cnblogs.com/Go7338395/p/15363646.html
Copyright © 2011-2022 走看看