题目大意:

  给一个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 ;
}

最新文章

  1. 获得、修改 SQL Server表字段说明
  2. Google Protocol Buffer 的使用和原理[转]
  3. PMP 第十章 项目沟通管理
  4. java, poi, excel
  5. Adaboost算法初识
  6. 条码解析的一片js
  7. 周赛C题 LightOJ 1047 (DP)
  8. c语言-自己写的库
  9. JavaScript中的日期时间函数
  10. AlexeyAB大神版yolo 待完善
  11. DeBug Python代码全靠print函数?换用这个一天2K+Star的工具吧,改进版
  12. golang Format string by key.
  13. php结合phantomjs实现网页截屏、抓取js渲染的页面
  14. 国内各视频网站android pad客户端支持分辨率情况初步统计
  15. Js 实战3(实现全选)
  16. 41.oracle索引,分析索引,索引碎片整理
  17. position布局影响点击事件以及冒泡获取事件目标
  18. bzoj2748(HAOI2018)音量调节
  19. [DP题]最长上升子序列
  20. [Unity]游戏Inside中的Chromatic Aberration效果学习

热门文章

  1. css3新增的属性
  2. 多校 HDU 6397 Character Encoding (容斥)
  3. Servlet笔记1--概述
  4. go 流程控制
  5. Microsoft.AspNet.SignalR使用cookie丢失
  6. Operfire 安装指南
  7. gbdt和xgboost api
  8. Service(一):认识service、绑定Service
  9. xcode7 创建pch文件
  10. sqlserver导出为EXcel--CSV格式