【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'包含所有入度为 ...
随机推荐
- 凸包入门(Graham扫描法)(A - Wall POJ - 1113)
题目链接:https://cn.vjudge.net/contest/276359#problem/A 题目大意:有一个国王,要在自己的城堡周围建立围墙,要求围墙能把城堡全部围起来,并且围墙距离城堡的 ...
- Understanding the Space Used by ZFS -- (转)
Understanding the Space Used by ZFS By Brian Leonard on Sep 28, 2010 Until recently, I've been confu ...
- CSS3 transition过渡
transition 属性是一个简写属性,用于设置四个过渡属性: transition: property duration timing-function delay; transition-pro ...
- LINUX修改、增加IP的方法,一张网卡绑定多个IP/漂移IP【转】
临时增加IP命令:ifconfig eth0:1 ip地址 netmask 子网码 broadcast 广播地址 gateway 网关 ifconfig eth0:1 10.1.104.65 net ...
- MySQL分页存储过程
CREATE PROCEDURE ProcPage(in tableName varchar(20),#表名 in showField varchar(100),#要显示的列名 in whereT ...
- Python基础(2):__doc__、文档字符串docString、help()
OS:Windows 10家庭中文版,Python:3.6.4 Python中的 文档字符串(docString) 出现在 模块.函数.类 的第一行,用于对这些程序进行说明.它在执行的时候被忽略,但会 ...
- pip离线安装
pip freeze > requirements.txt pip download <packages> pip install --no-index --find-links=& ...
- CSS3小黄人
CSS3实现小黄人 效果图: 代码如下,复制即可使用: <!DOCTYPE HTML> <HTML> <head> <title>CSS3实现小黄人&l ...
- 80端口被System占用 造成Apache不能启动的解方案
运行netstat -aon | findstr :80 ,发现pid是4的进程占用着80端口,这还是一个系统进程,kill不掉.所以只能另想办法: 1.打开注册表:regedit 2.找到:HKEY ...
- javaweb作业一
作业:Http全称叫什么?有什么特点?端口号是多少?超文本传输协议:(1)遵循请求/响应模型(2)http协议是一种无状态协议,请求/响应完成后,连接会断开.这时,服务器无法知道当前访问的用户是否是老 ...