考虑 \(\tt DP\),朴素的想法是令 \(f_S\) 表示 \(S\) 这个导出子图将边定向集合构成 \(\tt DAG\) 的方案数。

转移可以考虑剥去所有入度为 \(0\) 的点,那么我们就需要得到仅存在 \(T\) 这个子集为 \(S\) 中入度为 \(0\) 的点的方法。

直接做是困难的,考虑容斥。

强制钦定 \(T\) 这个子集为 \(S\) 中入度为 \(0\) 的点,其他的点不管,\(T \rightarrow S - T\) 的边显然可以连或不连,而 \(S - T \rightarrow T\) 中间的边必须强制不连,这样可以得到转移:

\[f_S = \sum\limits_{T \subseteq S, T \ne \varnothing} 2 ^ {ways(T, S - T)} \times f_{S - T}
\]

令 \(q_T = 2 ^ {ways(T, S - T)} \times f_{S - T}\),令 \(S\) 中恰好仅有 \(T\) 做为入度为 \(0\) 的点的方案为 \(p_T\),那么有:

\[q_T = \sum\limits_{T \subseteq S} p_S
\]

根据二项式反演的集合形式,有:

\[p_S = \sum\limits_{S \subseteq T} (-1) ^ {|T| - |S|} q_T
\]

在本题中,我们需要求:

\[\begin{aligned}
& \sum\limits_{T \subseteq S, T \ne \varnothing} p_T \\
&= \sum\limits_{T \subseteq S, T \ne \varnothing} \sum\limits_{T \subseteq R, R \subseteq S} (-1) ^ {|R| - |T|} q_R \\
&= \sum\limits_{T \subseteq S} (-1) ^ {|T| - 1} q_T
\end{aligned}
\]

因此有 \(f\) 的转移:

\[f_S = \sum\limits_{T \subseteq S, T \ne \varnothing} (-1) ^ {|T| - 1} \times 2 ^ {ways(T, S - T)} \times f_{S - T}
\]

此时只要处理出 \(ways(T, S - T)\) 即可做到 \(\mathcal{O}(3 ^ n)\)。

对于每个 \(S\),我们考虑单独计算 \(ways(T, S - T)(T \subseteq S)\),将其简写为 \(w_T\)。

对 \(w_T\) 进行 \(\tt DP\),显然每次只需取出一个在 \(T\) 中的点进行转移即可,可以使用 \(\mathtt{lowbit}, \mathcal{O}(1)\) 取出。

转移只需预处理出 \(w1_{i, S}, w2_{i, S}\) 分别表示 \(i \rightarrow S\) 中的边数和 \(S \rightarrow i\) 中的边数即可,这部分直接暴力。

于是本题可以做到时间复杂度 \(\mathcal{O}(3 ^ n)\),空间复杂度 \(\mathcal{O}(n \times 2 ^ n)\)。

有向图子图 DAG 数量的更多相关文章

  1. 静态频繁子图挖掘算法用于动态网络——gSpan算法研究

    摘要 随着信息技术的不断发展,人类可以很容易地收集和储存大量的数据,然而,如何在海量的数据中提取对用户有用的信息逐渐地成为巨大挑战.为了应对这种挑战,数据挖掘技术应运而生,成为了最近一段时期数据科学的 ...

  2. COGS 有标号的DAG/强连通图计数

    COGS索引 一堆神仙容斥+多项式-- 有标号的DAG计数 I 考虑\(O(n^2)\)做法:设\(f_i\)表示总共有\(i\)个点的DAG数量,转移考虑枚举DAG上所有出度为\(0\)的点,剩下的 ...

  3. 算法精解:DAG有向无环图

    DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...

  4. 《编译原理》画 DAG 图与求优化后的 4 元式代码- 例题解析

    <编译原理>画 DAG 图与求优化后的 4 元式代码- 例题解析 DAG 图(Directed Acylic Graph)无环路有向图 (一)基本块 基本块是指程序中一顺序执行的语句序列, ...

  5. [转帖]算法精解:DAG有向无环图

    算法精解:DAG有向无环图 https://www.cnblogs.com/Evsward/p/dag.html DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用 ...

  6. P6295 有标号 DAG 计数

    P6295 有标号 DAG 计数 题意 求 \(n\) 个点有标号弱联通 DAG 数量. 推导 设 \(f_i\) 表示 \(i\) 个点有标号 DAG 数量(不保证弱联通),有: \[f(i)=\s ...

  7. P6295-有标号 DAG 计数【多项式求逆,多项式ln】

    正题 题目链接:https://www.luogu.com.cn/problem/P6295 题目大意 求所有\(n\)个点的弱联通\(DAG\)数量. \(1\leq n\leq 10^5\) 解题 ...

  8. [转]综述论文翻译:A Review on Deep Learning Techniques Applied to Semantic Segmentation

    近期主要在学习语义分割相关方法,计划将arXiv上的这篇综述好好翻译下,目前已完成了一部分,但仅仅是尊重原文的直译,后续将继续完成剩余的部分,并对文中提及的多个方法给出自己的理解. _论文地址:htt ...

  9. 综述论文翻译:A Review on Deep Learning Techniques Applied to Semantic Segmentation

    近期主要在学习语义分割相关方法,计划将arXiv上的这篇综述好好翻译下,目前已完成了一部分,但仅仅是尊重原文的直译,后续将继续完成剩余的部分,并对文中提及的多个方法给出自己的理解. 论文地址:http ...

随机推荐

  1. 关于python常用的命令

    os模块: os.system os.system("cat/cmd等...") os.popen print os.popen("adb shell ls ../aa. ...

  2. Adversarial Defense by Restricting the Hidden Space of Deep Neural Networks

    目录 概 主要内容 Mustafa A., Khan S., Hayat M., Goecke R., Shen J., Shao L., Adversarial Defense by Restric ...

  3. JUC之集合中的线程安全问题

    集合线程安全问题 JDK Version:9 首先说下集合线程安全是什么:当多个线程对同一个集合进行添加和查询的时候,出现异常错误. 复现例子: package com.JUC; import jav ...

  4. 【jvm】04-我偷偷改了你编译后的class文件

    [jvm]04-我偷偷改了你编译后的class文件 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请 ...

  5. 使用JavaScript数组实现省份和城市的级联菜单

    查看本章节 查看作业目录 需求说明: 使用数组实现省份和城市的级联菜单.具体要求如下 在页面中添加城市时,根据选择的省份,动态地添加该省份的城市 页面加载完毕后,第一个列表框填充"两湖两广& ...

  6. 啥是Gossip协议?

    你好呀,我是歪歪. 元旦的时候我看到一个特别离谱的谣言啊,具体是什么内容我就不说了,我怕脏了大家的眼睛. 但是,我看到一个群里传的那叫一个绘声绘色,大家讨论的风生水起的,仿佛大家就在现场似的. 这事吧 ...

  7. MATLAB 错误之生成step图表出错

    m文件: step(Gi_close) hold on 错误示例: 使用step函数生成图表后,报错如下: Plots must be of the same type and size to be ...

  8. python @property用法(转载)

    偶然碰到一篇讲解 @property 比较清晰的文章 记录下来 日常复习 # @property'''@property是python的一种装饰器,是用来修饰方法的 作用:我们可以使用@propert ...

  9. centos7-collabora-office(在线文档编辑)

    1.wget https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7/repodata/repomd.xml.key &a ...

  10. SGU140. Integer Sequences

    https://codeforces.com/problemsets/acmsguru/problem/99999/140 n元同余方程的求解 对于任意二元我们可以替换成kgcd(a,b),不断迭代下 ...