考虑折半,将点按照标号是否 \(\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 = \sum\limits_{p_S \& T = Q} f_S \oplus g_T
\]

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

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

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

\[h_Q = \sum\limits_{S \& T = Q} vf_S \times vg_T
\]

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

ABC220H - Security Camera的更多相关文章

  1. Unity3D重要知识点

    数据结构和算法很重要!图形学也很重要!大的游戏公司很看重个人基础,综合能力小公司看你实际工作能力,看你的Demo. 1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作. 渲染管道 ...

  2. Unity3D 面试题汇总

    最先执行的方法是: 1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdate.LateUpdate].4.(渲染模块)OnGUI.5.再向后,就是卸载模块(TearD ...

  3. Unity随机随学

    1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作.渲染管道中的步骤很多,都要将几何物体从一个坐标系中变换到另一个坐标系中去. 主要步骤有: 本地坐标->视图坐标-> ...

  4. 越狱Season 1-Episode 15: By the Skin and the Teeth

    Season 1, Episode 15: By the Skin and the Teeth -Pope: doctor...you can leave. 医生你得离开 -Burrows: It's ...

  5. U3D常用题

    最先执行的方法是:1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdate.LateUpdate].4.(渲染模块)OnGUI.5.再向后,就是卸载模块(TearDo ...

  6. Questions about UIUC and USC

    Questions about UIUC and USC I am admitted to University of Illinois at Urbana-Champaign (UIUC) Prof ...

  7. Unity3D 面试ABC

    最先执行的方法是: 1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdate.LateUpdate].4.(渲染模块)OnGUI.5.再向后,就是卸载模块(TearD ...

  8. U3D 基础

    千里之行,始于足下! 最先执行的方法是:1.(激活时的初始代码)Awake2.Start3.Update(FixUpdate,LateUpdate)4.渲染模块(OnGUI)5.再向后,就是卸载模块( ...

  9. Unity3d笔试题大全

    1.       [C#语言基础]请简述拆箱和装箱. 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何接口类型的过程. 1.在堆中开辟内存空间. 2.将值类型的数据复制到堆中. ...

随机推荐

  1. 【C\C++笔记】register寄存器关键字

    使用寄存器变量提高运行速度 1未使用寄存器组 #include<stdio.h> int main(){ unsigned long a=0; for(int i=0;i<10000 ...

  2. LTD: Low Temperature Distillation for Robust Adversarial Training

    目录 概 主要内容 Chen E. and Lee C. LTD: Low temperature distillation for robust adversarial training. arXi ...

  3. <数据结构>图的构建与基本遍历方法

    目录 建立一个图 邻接矩阵 邻接表 深度优先遍历(DFS) 具体步骤: 第一部分:给定结点u,遍历u所在的连通块的所有结点 第二部分:对图G所有结点进行第一部分的操作,即遍历了图的所有连通分量 伪代码 ...

  4. ROS机器人导航一 : 从英雄联盟到ROS导航

    写在前面: 这是这个系列的第一篇 本系列主要从零开始深入探索ROS(机器人操作系统)的导航和规划. 这个系列的目标,是让大家了解: 1.ROS的导航是怎么实现的 2.认识ROS里各种已有的导航算法,清 ...

  5. 『无为则无心』Python函数 — 29、Python变量和参数传递

    目录 1.Python的变量 (1)Python变量不能独立存在 (2)变量是内存中数据的引用 (3)注意点 2.了解变量的引用 3.Python的参数传递(重点) (1)示例 (2)结论 (3)总结 ...

  6. windows 安装GCC

    1. 下载GCC执行文件  https://pan.baidu.com/s/1foOeAo29gLr_8HhTo_69pA 提取码 cs93 2. 解压文件到D:\mingw64 3. 新建系统环境变 ...

  7. 深入 Laravel 内核之外观模式(门面模式)

    门面模式核心内容: 客户端与子系统的通信通过外观对象进行: 外观对象封装一系列子系统的具体对应方法,对客户端只需暴露一个单一的入口方法: 客户端通过访问外观对象即可调用子系统的基础方法,无需关心子系统 ...

  8. css 文本基础 实战 小米官方卡片案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 桥接模式(python)

    from abc import ABCMeta, abstractmethod class Shape(metaclass=ABCMeta): def __init__(self, color): s ...

  10. JS中void(0)操作符的使用

    今天 在看源码时,发现这种写法 if(value === void(0)){ // } 以前没有见过这种写法,感觉就是判断一个变量是否有值,官网上是这样说的: void运算符 对给定的表达式进行求值, ...