考虑折半,将点按照标号是否 \(\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. 【算法】main函数的堆栈溢出

    main函数的堆栈的大小默认为1mb 如果把数组int x[1000][1000]定义在main函数里 则int为4byte,8bit为1byte,1024byte为1kb,1024kb为1mb 4* ...

  2. Simplicial principal component analysis for density functions in Bayes spaces

    目录 问题 上的PCA Hron K, Menafoglio A, Templ M, et al. Simplicial principal component analysis for densit ...

  3. Kylin启动步骤

    Kylin本身的启动命令比较简单, 但是由于Kylin依赖的其他组件比较多, 所以把完整的启动步骤整理一下. 1.确保集群时间同步 首先查看集群中的时间是否同步 date 如果时间不一致,需要使用如下 ...

  4. Elasticsearch打造全文搜索引擎(一)

     带着问题上路--ES是如何产生的? (1)思考:大规模数据如何检索? 如:当系统数据量上了10亿.100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题: 1)用什么数据库好?(mysq ...

  5. SpringMVC 解析(一)概览

    Spring MVC是Spring提供的构建Web应用程序的框架,该框架遵循了Servlet规范,负责接收并处理Servelt容器传递的请求,并将响应写回Response.Spring MVC以Dis ...

  6. Vulnhub系列:Tomato(文件包含getshell)

    这个靶机挺有意思,它是通过文件包含漏洞进行的getshell,主要姿势是将含有一句话木马的内容记录到ssh的登录日志中,然后利用文件包含漏洞进行包含,从而拿到shell 0x01 靶机信息 靶机:To ...

  7. RocketMQ架构原理解析(一):整体架构

    RocketMQ架构原理解析(一):整体架构 RocketMQ架构原理解析(二):消息存储(CommitLog) RocketMQ架构原理解析(三):消息索引(ConsumeQueue & I ...

  8. AVD模拟器怎么配置上网

    转自:http://blog.csdn.net/you_jinjin/article/details/7228303 方法一 首先,Windows下,配置Adroid环境变量(Win7为例) 1.桌面 ...

  9. 在pyqt5中展示pyecharts生成的图像

    技术背景 虽然现在很少有人用python去做一些图形化的界面,但是不得不说我们在日常大部分的软件使用中都还是有可视化与交互这样的需求的.因此pyqt5作为一个主流的python的GUI框架地位是非常重 ...

  10. 《剑指offer》面试题18. 删除链表的节点

    问题描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = ...