题目描述

求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果。


题解

状压dp+容斥原理

设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum[i]}$ 减去不为强连通图的方案数得到强连通图的方案数,其中 $sum[i]$ 表示点集 $i$ 中边的数目。

考虑什么样的图不是强连通图:缩点后入度为0的强连通分量对应的点集不是全集。

枚举这些入度为0的强连通分量对应的点集,由于无法保证只有这些点构成的入度为0的强连通分量,因此需要进一步容斥。推之可以发现容斥系数与这些点形成的强连通分量数目的奇偶性有关。

更具体来讲,形成奇数个强连通分量时容斥系数为正(即减去),形成偶数个强连通分量为负(即加上)。

设 $g[i]=i个点形成奇数个强连通分量的方案数-i个点形成偶数个强连通分量的方案数$ ,那么枚举 $i$ 中编号最小的点所在连通块 $i-j$ (即枚举剩下部分 $x$ 不与编号最小的点相连的强连通分量 $j$ ),则有 $g[i]=-\sum\limits_{j\subset x}f[i-j]·g[j]$ 。注意此时的 $g$ 不包含 $i$ 只形成一个强连通分量的情况,以便下面 $f$ 的容斥。

那么枚举钦定的入度为0的强连通分量 $j$ ,就有 $f$ 的转移:$f[i]=2^{sum[i]}-\sum\limits_{j\subset i}2^{sum[i]-w[j]}·g[j]$ ,其中 $w[j]$ 表示 $i$ 向 $j$ 连边的数目,表示钦定的点不能被连边,其它的随意连。

最后将只有一个强连通分量的方案 $f[i]$ 算进 $g[i]$ 。

答案就是 $f[2^n-1]$ 。

时间复杂度 $O(3^n)$

#include <cstdio>
#define N 32775
#define mod 1000000007
typedef long long ll;
int in[N] , out[N] , cnt[N] , sum[N] , w[N];
ll b[215] , f[N] , g[N];
void dfs(int i , int j)
{if(i & (j - 1)) dfs(i , i & (j - 1));w[j] = w[j - (j & -j)] + cnt[in[j & -j] & i];
}
int main()
{int n , m , i , j , x , y;scanf("%d%d" , &n , &m);b[0] = 1;for(i = 1 ; i <= m ; i ++ ){scanf("%d%d" , &x , &y) , x -- , y -- ;in[1 << y] |= 1 << x , out[1 << x] |= 1 << y;b[i] = b[i - 1] * 2 % mod;}for(i = 1 ; i < (1 << n) ; i ++ ){x = i - (i & -i) , cnt[i] = cnt[x] + 1 , sum[i] = sum[x] + cnt[in[i & -i] & i] + cnt[out[i & -i] & i] , f[i] = b[sum[i]];dfs(i , i);for(j = x ; j ; j = x & (j - 1)) g[i] = (g[i] - f[i ^ j] * g[j] % mod + mod) % mod;for(j = i ; j ; j = i & (j - 1)) f[i] = (f[i] - b[sum[i] - w[j]] * g[j] % mod + mod) % mod;g[i] = (g[i] + f[i]) % mod;}printf("%lld\n" , f[(1 << n) - 1]);return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/8678089.html

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

  1. UOJ#37. 【清华集训2014】主旋律

    题目大意: 传送门 题解: 神题--Orz. 首先正难则反. 设$f_S$表示选取点集状态为s时,这部分图可以构成非强联通图的方案数. 设$p_{S,i}$表示点集s缩点后有i个入度为0点的方案数,保 ...

  2. uoj#38. 【清华集训2014】奇数国(线段树+数论)

    传送门 不难看出就是要先求区间积,再求这个区间积的\(\varphi\) 因为\(\varphi(x)=x\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\ ...

  3. [清华集训2014]主旋律

    题目 传送门 to UOJ 思路 好像思路都是靠 R a i n y B u n n y \sf RainyBunny RainyBunny 讲的,自己完全不会啊,哭了. 要求图是强连通的,这个很难直 ...

  4. [UOJ]#36. 【清华集训2014】玛里苟斯 线性基+分类讨论

    题意: 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题. SSS 是一个可重集合,S=a1,a2,-,anS={a1,a2,-,an}S=a1,a2,-,an. 等概率随机 ...

  5. uoj#36. 【清华集训2014】玛里苟斯(线性基+概率期望)

    传送门 为啥在我看来完全不知道为什么的在大佬们看来全都是显然-- 考虑\(k=1\)的情况,如果序列中有某一个\(a_j\)的第\(i\)位为\(1\),那么\(x\)的第\(i\)位为\(1\)的概 ...

  6. 【BZOJ-2669】局部极小值 状压DP + 容斥原理

    2669: [cqoi2012]局部极小值 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 561  Solved: 293 [Submit][Stat ...

  7. 【清华集训2014】【BZOJ3812】主旋律

    Description 响应主旋律的号召,大家决定让这个班级充满爱,现在班级里面有 n 个男生. 如果 a 爱着 b,那么就相当于 a 和 b 之间有一条 a→b 的有向边.如果这 n 个点的图是强联 ...

  8. 【清华集训2014】Sum)(类欧几里得算法)

    [清华集训2014]Sum 然后本质上我们需要求解的就是那个带根号式子的奇偶性,然后我们发现这个式子很像是类欧几里得算法,求解一个斜率为无理数直线下的整点个数,然后我们直接对于一般形式求解,那么就是每 ...

  9. 清华集训2014 玛里苟斯

    清华集训2014 玛里苟斯 求子集异或和k次方的期望. 异或考虑按位算贡献. 对于\(K=1\),考虑异或和\(\frac{x}{2}\)就是答案. 证明简单来说就是,你可以先打一个概率\(dp\)分 ...

最新文章

  1. 关闭计算机后自动开机的解决方法
  2. 美容院会籍管理,看着简单,其实很复杂
  3. p点到(a,b)点两所在直线的垂点坐标及p点是否在(a,b)两点所在直线上
  4. 从红旗5.0提及——看Linux的内存办理
  5. 【机器学习基础】数学推导+纯Python实现机器学习算法24:LightGBM
  6. 关于几种编码的那些事
  7. GBDT是如何成为推荐系统顶级工具人的?
  8. C语言中float,double类型,在内存中的结构(存储方式).
  9. 美女学霸直博中科院,本科武大王者全国16强,妥妥现实版“爽文女主”!
  10. golang make第三个参数的作用
  11. 国外大神一张图学会python-学习Python不得不关注和学习的国外大神博客
  12. 计算机机房系统安装,学校机房轻松安装WIN7系统.doc
  13. java读取mp3文件_java读取mp3文件 | 学步园
  14. java pdf 加图片_java实现在pdf模板的指定位置插入图片
  15. 2020-08-29---周总结
  16. android 名片识别 简书,nodejs实现名片识别
  17. VUE前端删除和批量删除
  18. 非递归实现二叉树的遍历
  19. Android内存泄漏检测工具使用手册
  20. 企业项目实战k8s篇(二十)持续集成与持续交付

热门文章

  1. CCNA-第一篇-基础入门概念
  2. 【POJ - 2253】Frogger(floyd,或 部分瓶颈生成树的最大边)
  3. 【HDU - 4006】The kth great number (优先队列,求第k大的数)
  4. 【HDU - 1087】Super Jumping! Jumping! Jumping! (最大上升子序列类问题,dp)
  5. 4.4)深度卷积网络:人脸识别和神经风格转换
  6. 2.Functions and Getting Help
  7. java hive demo_java 操作hive通过jdbc
  8. centos 6.5 apache mysql php_CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境
  9. vla点转为lisp点_A股大涨53.70点,收复3400点,下周会继续大反弹吗?
  10. 如何将mysql的数据库渲染到页面_vue.js实现数据库的JSON数据输出渲染到html页面功能示例...