传送门

Sol

考虑容斥

强联通图反过来就是一些缩点后的 \(DAG\)

一个套路就是对出(入)度为 \(0\) 的点进行容斥

设 \(g_S,h_S\) 分别表示选了奇数个 \(0\) 入度和偶数个的,集合为 \(S\) 的方案数

那么通过钦定一个特殊的点 \(u\) 有

\[g_S=\sum_{T\subset S,u \in T}f_Th_{S-T}
\]

\[h_S=\sum_{T\subset S,u \in T}f_Tg_{S-T}
\]

那么考虑容斥求出 \(f\),由于 \(g_S\) 包含 \(f_S\),而且 \(f_S\) 合法,所以容斥的时候 \(g_S\) 不能包括 \(f_S\)

那么

\[f_S=2^{|E_{\{S\}}|}+\sum_{T\subset S,T\ne S}(h_T-g_T)2^{E_{\{S-T\}}+E{_{\{T\}->\{S-T\}}}}
\]

这里的 \(g_S\) 不包括 \(f_S\),\(E\) 表示边集,\(\{S\}->\{T\}\) 即集合 \(S\) 到 \(T\) 的边

可以通过把子集弄出来做优化到 \(\Theta(3^n)\)

不过我没有写QwQ

  1. # include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int mod(1e9 + 7);
  5. int n, m, f[1 << 15], g[1 << 15], h[1 << 15], cnt[1 << 15], to[20], e[1 << 15], pw[300];
  6. inline void Inc(int &x, int y) {
  7. if ((x += y) >= mod) x -= mod;
  8. }
  9. int main() {
  10. register int i, a, b, t, s, j;
  11. scanf("%d%d", &n, &m), t = 1 << n;
  12. for (i = 1; i <= m; ++i) scanf("%d%d", &a, &b), --a, --b, to[a] |= 1 << b;
  13. for (i = 1; i < t; ++i) cnt[i] = cnt[i >> 1] + (i & 1);
  14. for (pw[0] = i = 1; i <= m; ++i) {
  15. pw[i] = pw[i - 1] << 1;
  16. if (pw[i] >= mod) pw[i] -= mod;
  17. }
  18. for (i = 0; i < t; ++i)
  19. for (j = 0; j < n; ++j) if (i >> j & 1) e[i] += cnt[to[j] & i];
  20. for (i = 0; i < n; ++i) f[1 << i] = g[1 << i] = 1;
  21. for (i = 1; i < t; ++i)
  22. if (cnt[i] > 1) {
  23. f[i] = pw[e[i]];
  24. for (a = 0; a < n; ++a) if (i >> a & 1) break;
  25. for (j = (i - 1) & i; j; j = (j - 1) & i) {
  26. for (s = b = 0; b < n; ++b) if (i >> b & 1) s += cnt[to[b] & (i ^ j)];
  27. Inc(f[i], 1LL * (h[j] - g[j] + mod) * pw[s] % mod);
  28. if (j >> a & 1) {
  29. Inc(g[i], 1LL * f[j] * h[i ^ j] % mod);
  30. Inc(h[i], 1LL * f[j] * g[i ^ j] % mod);
  31. }
  32. }
  33. Inc(f[i], (h[i] - g[i] + mod) % mod), Inc(g[i], f[i]);
  34. }
  35. printf("%d\n", f[t - 1]);
  36. return 0;
  37. }

BZOJ3812: 主旋律的更多相关文章

  1. BZOJ3812 主旋律(状压dp+容斥原理)

    设f[S]为S点集是SCC的方案数.考虑通过去掉不合法方案转移.可以枚举入度为0的SCC所含点集S',这样显然S^S'内部的边和由S'连向S^S'的边删还是不删任选.但是这样无法保证S'包含所有入度为 ...

  2. BZOJ3812主旋律

    /* 这道题其实没有看懂 所以整理一下吧 首先思想转化成所有方案减去不强联通的方案 不强联通的方案相当于很多强联通分量缩点后的dag 转化成子问题, 问很多点的dag方案数 然后枚举作为出度为0的点集 ...

  3. [BZOJ3812]主旋律:状压DP+容斥原理

    分析 Miskcoo orz 令\(f[S]\)表示使得\(S\)这个点集强连通的方案数. 然后呢?不会了 考虑到将一个有向图SCC缩点后,得到的新图是一个DAG,所以我们可以类比带标号DAG计数的解 ...

  4. bzoj3812 主旋律 容斥+状压 DP

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3812 题解 考虑对于图的联通性的 DP 的一般套路:总方案 - 不连通的方案. 那么我们只需要 ...

  5. bzoj3812&uoj37 主旋律

    正着做不好做,于是我们考虑反着来,如何计算一个点集s的答案呢,一定是所有的方案减去不合法的方案,不合法的方案一定是缩完点后是一个DAG,那么就一定有度数为0的scc,于是我们枚举s的子集,就是说这些点 ...

  6. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

    题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...

  7. BZOJ3812 清华集训2014 主旋律

    直接求出强联通生成子图的数量较难,不妨用所有生成子图的数量减去非强联通的. 非强联通生成子图在所点后满足编号最小的点所在的强联通分量不是全集. 由于$n$很小,我们可以考虑状态压缩. 对于点集$S$, ...

  8. bzoj 3812: 主旋律 [容斥原理 状压DP]

    3812: 主旋律 题意:一张有向图,求它的生成子图是强连通图的个数.\(n \le 15\) 先说一个比较暴力的做法. 终于知道n个点图的是DAG的生成子图个数怎么求了. 暴力枚举哪些点是一个scc ...

  9. BZOJ 3812 : 主旋律

    非常神仙的状压DP+容斥原理. 首先,给出一个状压方程:$f_S$表示点集为$S$的情况下,整个点集构成强连通图的方案数. 这个DP方程还是比较容易想到的,但是没有办法正常转移,考虑通过容斥原理进行转 ...

随机推荐

  1. 架构师养成记--34.Redis持久化

    ---恢复内容开始--- redis是一个支持持久化的内存数据库,也就是搜redis需要经常将内存中的数据同步到硬盘来保证持久化.redis持久化有两种方式. snapshotting(快照)默认方式 ...

  2. docker 磁盘清理 相关

    用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响. 本文先对 Docker 的空间分析与清理进行说明,然后对 ...

  3. LOJ2229. 「BJOI2014」想法(随机化)

    题目链接 https://loj.ac/problem/2229 题解 评分标准提示我们可以使用随机化算法. 首先,我们为每一道编号在 \([1, m]\) 以内的题目(这些题目也对应了 \(m\) ...

  4. docker with devicemapper storage driver

    storage driver的选择依据很多的条件,比如发行版版本,团队技术积累,稳定性等. device mapper是redhat/centos中最适合的, 稳定性也可以,内核原生支持,基于块设备, ...

  5. Ribbon是什么?

    学而时习之,不亦说乎!                              --<论语> Ribbon使用版本2.2.2 Ribbon是什么? 开始接触Ribbon的时候,网上以及很 ...

  6. Windows Server 2003、2008、2012系统的安装

    说在前面的话 Windows Server 2003,和Windows XP十分相似,可以简单地认为Windows Server 2003是在Windows XP的基础上多了一些服务器管理和操作的功能 ...

  7. Android开源项目xUtils HttpUtils模块分析(转)

    xUtils是github上的一个Android开源工具项目,其中HttpUtils模块是处理网络连接部分,刚好最近想整理下Android网络编程知识,今天学习下xUtils中HttpUtils. x ...

  8. ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash

    rails 开发中 5.1版本使用binding.pry会报 ActionController::UnfilteredParameters: unable to convert unpermitted ...

  9. 微服务Kong(六)——配置参考

    1. 配置加载 如果您通过其中一个官方软件包安装了Kong,Kong会附带默认配置文件,该文件可以在/etc/kong/kong.conf.default中找到.要开始配置Kong,您可以复制此文件: ...

  10. 深入理解java集合框架之---------Arraylist集合

    ArrayList简介 ArrayLIst是动态数组,用MSDN的说法就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小,要注意 ...