\(Description\)

给定\(n\)个点\(m\)条边的有向图,求有多少个边集的子集,构成的图没有环。
\(n\leq17\)。

\(Solution\)

问题也等价于,用不同的边集构造DAG,有多少种合法方案。我们考虑怎么构造DAG使得方案不重不漏。
我明知道一个DAG的拓扑序是唯一确定的。所以我们按照拓扑序每次转移一个点集。
\(f[s][s']\)表示 构造 已经选择的点集为\(s\),当前最后一层点集为\(s'\)的DAG 的方案数。
转移时枚举不在\(s\)中的子集\(k\),\(k\)合法首先要满足\(s'\)与\(k\)中所有点有边。
然后设\(s\oplus s'\)与k中某点的连边有\(cnt1_i\)条,\(s'\)与\(k\)中该点的连边有\(cnt2_i\)条,则该点的合法方案数为\(2^{cnt1_i}\times(2^{cnt2_i}-1)\)。
\(f[s|k][k]=\sum f[s][s']\times\prod 2^{cnt1_i}\times(2^{cnt2_i}-1)\)。
复杂度\(O(4^n\times m)\)。

考虑减掉第二维。直接枚举当前点集\(i\),然后枚举补集的子集\(j\)。只要还是按层加入节点就能保证是DAG。
\(i,j\)之间可以不存在边,设\(i\)连向\(j\)的边有\(cnt\)条,则\(f[i|j]+=f[i]\times 2^j\)?
当然没这么简单。容易发现\(i|j\)可以由很多组\(i,j\)构成。所以加个容斥,容斥系数是\((-1)^{sz[j]+1}\)。
不是很懂这个容斥系数。。是加1个点的然后减去还可以由两个点的...?
复杂度\(O(3^nm)\),可以优化到\(O(3^n+2^nm)\)(不管了)(虽然最大数据要跑10s+...)。

https://blog.csdn.net/ylsoi/article/details/80427659
https://www.cnblogs.com/KaNNeXFF/p/5942983.html

#include <cstdio>
#include <cctype>
#include <algorithm>
#define In(x,s) (s>>x&1)
#define gc() getchar()
#define mod 1000000007
const int N=20,S=(1<<17)+3;int n,m,pw[N*N],mp[N][N],num[N][S],f[S];inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}
inline int Calc(int s)
{int res=0;for(; s; s>>=1) res+=s&1;return res;
}int main()
{freopen("E.in","r",stdin);freopen("E.out","w",stdout);n=read(),m=read();pw[0]=1;for(int i=1; i<=m; ++i) pw[i]=pw[i-1]<<1, pw[i]>=mod&&(pw[i]-=mod);for(int i=1; i<=m; ++i) mp[read()-1][read()-1]=1;int all=(1<<n)-1;for(int s=0; s<=all; ++s)for(int v=0; v<n; ++v)if(In(v,s))for(int x=0; x<n; ++x) num[x][s]+=mp[x][v];f[0]=1;for(int i=0; i<=all; ++i){if(!f[i]) continue;int rest=all^i;for(int j=rest; j; j=(j-1)&rest){int sz=Calc(j), cnt=0;for(int k=0; k<n; ++k)if(In(k,i)) cnt+=num[k][j];if(sz&1) f[i|j]+=1ll*f[i]*pw[cnt]%mod, f[i|j]>=mod&&(f[i|j]-=mod);else f[i|j]-=1ll*f[i]*pw[cnt]%mod-mod, f[i|j]>=mod&&(f[i|j]-=mod);}}printf("%d\n",f[all]);return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/9626940.html

NOIp模拟赛 巨神兵(状压DP 容斥)相关推荐

  1. [CQOI2012] 局部极小值(状压DP + 容斥 + 搜索)

    problem luogu-P3160 solution 这么小的数据范围,非暴力不状压.暴力 O(28!)O(28!)O(28!) 呵呵呵可以拉走了. 我们不妨从小到大填数字,这样如果局部极小值点还 ...

  2. bzoj2560串珠子 状压dp+容斥(?)

    2560: 串珠子 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 515  Solved: 348 [Submit][Status][Discuss ...

  3. 【NOIP模拟赛】超级树 DP

    这个题我在考试的时候把所有的转移都想全了就是新加一个点时有I.不作为II.自己呆着III.连一个IV.连接两个子树中的两个V连接一个子树中的两个,然而V我并不会转移........ 这个题的正解体现了 ...

  4. BZOJ 2073: [POI2004]PRZ( 状压dp )

    早上这道题没调完就去玩NOI网络同步赛了.... 状压dp , dp( s ) 表示 s 状态下所用的最短时间 , 转移就直接暴力枚举子集 . 可以先预处理出每个状态下的重量和时间的信息 . 复杂度是 ...

  5. NOIP模拟 整数划分(数论,质因数分解,状压DP)

    这道题竟然暴力能拿到90分,大佬orzorzorz%%%%%%%%%%% --------------------------分割线(下面是正解)--------------------------- ...

  6. 【2022国赛模拟】无损加密——LGV引理、状压DP

    原创题无来源 题目描述 题解 首先把问题稍作简化,我们可以最后把行列式乘上所有 dkd_kdk​ 的积的 nnn 次方,这样前面的过程就不用考虑 dkd_kdk​ 了,暴力也只需要变动 [lk,rk] ...

  7. 【gmoj4743】【8.11模拟赛T1】积木【状压DP/暴搜】

    题目链接:积木 分析 这题数据也太水了吧我喜欢 可以直接暴力搜索每一个积木的每一个顺序的每一种放置方法. 阶乘级别的复杂度,居然能过就离谱. 正解是状压DP.f[i][j][k]f[i][j][k]f ...

  8. nyoj1273 河南省第九届省赛_宣传墙、状压DP+矩阵幂加速

    宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...

  9. 糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) Apare_xzc

    糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) xzc 2019/4/5 试题 I: 糖果 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25分 [问题描述]    ...

  10. BZOJ 2560: 串珠子 (状压DP+枚举子集补集+容斥)

    (Noip提高组及以下),有意者请联系Lydsy2012@163.com,仅限教师及家长用户. 2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MB Su ...

最新文章

  1. xmarin.android导航栏,android – 如何在xamarin表单中更改导航页面后退按钮
  2. lazada开店平台费用都有哪些,产品如何来做定价?
  3. openresty开发系列21--lua的模块
  4. 阿里文娱测试开发专家谈《算法基石:实时数据质量如何保障?》
  5. 《剑指offer》构建乘积数组
  6. 情商低的七种表现,你占了几个
  7. 重磅!彭博社“机器学习基础”教程视频及讲义下载
  8. 如何做一个国产数据库(六) 网络传输 nodejs做测试客户端
  9. Python 集合定义及运算
  10. IDEA Debug 无法进入断点的解决方法
  11. 吃了核辐射食物怎么办_不瞒你说:经常胃酸烧心怎么办?,多吃这些食物,保护胃黏膜远...
  12. vmware 14 pro许可证
  13. 小管家进销存_管钱、管货、管顾客,“北漂”京东便利店主点赞掌柜管家
  14. Ubuntu18.04grub增加console口输出
  15. python 追加写文件_python怎么追加写入文件
  16. 开发一个渐进式Web应用程序(PWA)前都需要了解什么?
  17. CrownCAD二次开发,从中国结代码看代码简洁之美
  18. 人工智能作业之产生式推理系统
  19. beautifulsoup解析
  20. Git冲突与解决冲突

热门文章

  1. CentOS 安装字体
  2. 一阶微分方程的初等解法
  3. tdr上升时间什么设定_TDR的完整形式是什么?
  4. 各国网络标识码表(MCC MNC表)
  5. 通过远程PHP远程调用ZABBIX接口获取数据
  6. 构建统一CIM数字底盘,实现基于BIM的全流程管控
  7. UVA 10066 The Twin Towers
  8. 一个月薪 12000 的北京程序员的真实生活 !
  9. wgc84 笛卡尔_WGS84椭球下的UTM坐标与Clarke80椭球下的兰勃特坐标转换方法研究
  10. 回旋共振 有效质量的测量