【2016NOIP十连测】【test4】【状压DP】【容斥原理】巨神兵
题目大意:
给一个n个点(n<=17),m条边的有向图(无自环、无重边),求其无环子图的方案数。
题解:
看到n<=17,显然是用状压dp。
用f[i]表示点集i的满足条件的方案数。
状态转移时可以一层一层地把点加进点集。
具体的,枚举已知点集i,在i的补集中枚举下一层的点集j(可以无边相连)(以下i,j定义相同),
统计由i连向j的边e。对于这些边,每一条都可以选或不选,
就有2e种情况,即:
f[i^j]+=f[i]*2e;
这显然是错误的,
因为对于点集k的一种连边方案,可以有多种方式划分成i,j,
这就意味着不同的i,j可能包含了同样的方案。
于是以j中包含的元素把并集为k的i和j分类
转移的时候多乘个容斥系数就可以了,即:
f[i^j]+=f[i]*2e*(-1)size(j)+1;
复杂度O(3nm)可优化成O(3n+2nm);
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int N = ;
const int M = ;
const int P = 1e9+; ll read(){
ll re=;bool neg=;char ch=getchar();
while (!isdigit(ch)) {if (ch=='-') neg=;ch=getchar();}
while (isdigit(ch)) re=re*+ch-'',ch=getchar();
if (neg) re=-re; return re;
} int n,m,U;
int p2[M],coe[<<N],g[N][N];
int f[<<N],deg[<<N],sum[<<N]; void readin(){
n=read(),m=read();
for (int i=;i<m;i++)
g[read()-][read()-]=;
U=(<<n)-;
} void prework(){
p2[]=;coe[]=-;
for (int i=;i<=m;i++){
p2[i]=p2[i-]<<;
if (p2[i]>=P) p2[i]%=P;
}
for (int i=;i<(<<n);i++){
coe[i]=coe[i>>];
if (i&) coe[i]*=-;
}
} void dp(){
f[]=;
for (int i=;i<U;i++){
for (int j=;j<n;j++)deg[<<j]=;
for (int j=;j<n;j++)if ((<<j)&i)
for (int k=;k<n;k++) deg[<<k]+=g[j][k];
int C=U^i;sum[]=;
for (int tmp=(C-)&C;;tmp=(tmp-)&C){
int Now=C^tmp;
sum[Now]=sum[Now-(Now&-Now)]+deg[Now&-Now];
f[i^Now]=(f[i^Now]+(ll)f[i]*p2[sum[Now]]*coe[Now])%P;
if (!tmp) break;
}
}
} int main(){
readin();
prework();
dp();
printf("%d\n",f[U]);
return ;
}
【2016NOIP十连测】【test4】【状压DP】【容斥原理】巨神兵的更多相关文章
- 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理
题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...
- 【bzoj2560】串珠子 状压dp+容斥原理
题目描述 有 $n$ 个点,点 $i$ 和点 $j$ 之间可以连 $0\sim c_{i,j}$ 条无向边.求连成一张无向连通图的方案数模 $10^9+7$ .两个方案不同,当且仅当:存在点对 $(i ...
- BZOJ2669 [cqoi2012]局部极小值 状压DP 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2669 题意概括 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所 ...
- 4455: [Zjoi2016]小星星|状压DP|容斥原理
OrzSDOIR1ak的晨神 能够考虑状压DP枚举子集,求出仅仅保证连通性不保证一一相应的状态下的方案数,然后容斥一下就是终于的答案 #include<algorithm> #includ ...
- 【BZOJ 2669】 2669: [cqoi2012]局部极小值 (状压DP+容斥原理)
2669: [cqoi2012]局部极小值 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 667 Solved: 350 Description 有一 ...
- 牛客网 十二桥问题(状压DP)
https://ac.nowcoder.com/acm/contest/1104/B 注意到\(\text{K}\)只有\(12\),因此对起点与每个毕经边对应的点单源最短路,\(\text{DP}\ ...
- BZOJ 2669 CQOI2012 局部极小值 状压dp+容斥原理
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2669 题意概述:实际上原题意很简洁了我就不写了吧.... 二话不说先观察一下性质,首先棋盘 ...
- HDU5838 Mountain(状压DP + 容斥原理)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5838 Description Zhu found a map which is a N∗M ...
- 【BZOJ-2669】局部极小值 状压DP + 容斥原理
2669: [cqoi2012]局部极小值 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 561 Solved: 293[Submit][Status ...
- BZOJ3812 主旋律(状压dp+容斥原理)
设f[S]为S点集是SCC的方案数.考虑通过去掉不合法方案转移.可以枚举入度为0的SCC所含点集S',这样显然S^S'内部的边和由S'连向S^S'的边删还是不删任选.但是这样无法保证S'包含所有入度为 ...
随机推荐
- c++ ACM常用函数
1 保留小数点后两位 #include <iomanip> cout << setiosflags(ios::fixed) << setprecision(2)&l ...
- std::max 错误
Today I typed the following: int t = (std::max)(timeout, lagtime); Why did I put parentheses around ...
- [转]QVector与QByteArray——Qt的写时复制(copy on write)技术
我们在之前的博文QVector的内存分配策略与再谈QVector与std::vector——使用装饰者让std::vector支持连续赋值中简单聊了聊QVector内存分配和赋值方面的一点东西,今天接 ...
- MongoDB以Windows Service运行
以Administrator身份打开CMD并输入以下命令 cd D:\Developer\MongoDB\mongodb-win32-x86_64-2.4.6\binD:mongod --logpat ...
- Sysmon + NXlog构建简单的windows安全监控
工具: Sysmon (sysmon 5.0) ,NXlog(nxlog-ce-2.9.1716.msi) . Sysmon监控系统并生成windows event log, NXlog将wind ...
- 微信小程序实战--开发一个简单的快递单号查询
功能如图: 虽然工作中只负责小程序后台开发,但是还是小程序开发产生了浓厚的兴趣,官方文档也是超级详细了 这里就简单做一个快递单号的查询: 新建一个page: 接着就可以写wxml了.这里用一个简单的i ...
- 【codeforces】940F题解
CF Round #466的最后一题,颇有难度,正解是带修改莫队算法. [题意] 给定一个长度为\(n\)的数组\(a\),并且要求执行\(q\)个操作,有两种不同的操作: ①询问一个区间\([l,r ...
- python面向对象——类
from:http://www.runoob.com/python3/python3-class.html Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在P ...
- .net 运行中出现的错误解决方法记录
1.应用程序无法启动,因为应用程序的并行配置不正确.有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具. https://jingyan.baidu.com/article ...
- Filter过滤器-JavaWeb三大组件之一
Servlet.Filter.Listener是JavaWeb的三大组件,给Web开发提供了很大的便利. 什么是Filter? Filter,过滤器.类似与生活中的净水器.空气净化器. JavaWeb ...