正题

题目链接:https://www.luogu.com.cn/problem/AT2390


解题思路

\(n\)个点的\(DAG\),\(m\)条边可有可无,\(1\)和\(2\)上有石头。求有多少种方案使得先手必胜。

\(1\leq n\leq 15,1\leq m\leq \frac{n(n-1)}{2}\)


解题思路

这个复杂度比较麻烦,要设计一个比较巧妙的\(dp\)。

考虑到题目是问多少种情况\(SG(1)\neq SG(2)\),其实求\(SG(1)=SG(2)\)的方案会更简单些。

设\(f_{S}\)表示目前只考虑了生成子图\(S\)时\(SG(1)=SG(2)\)的方案数,那么若从\(T\)转移到\(S\)时我们可以构造一种方案使得\(T\)的所有点内的\(SG\)加一,然后\(S/T\)的所有点的\(SG\)为\(0\)。

也就相当于我们把点按照\(SG\)大小分成若干层,然后一层一层转移进去。好了现在考虑怎么转移\(f_S\),我们枚举它的子集\(T\),那么\(S/T\)就是它的下一层,也就是目前\(S/T\)内的点\(SG=0\)。

对于\(T\)内的每个点,我们需要连接至少一个\(S/T\)内的点,对于\(S/T\)内的点,可以随意连接\(T\)内的点,枚举一下点集统计方案就好了。

时间复杂度\(O(3^nn)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
const ll N=15,P=1e9+7;
ll n,m,ans,f[1<<N],c[1<<N],e[N];
vector<int>q[N];
signed main()
{
scanf("%lld%lld",&n,&m);
for(ll i=1;i<=m;i++){
ll x,y;
scanf("%lld%lld",&x,&y);
x--;y--;e[x]|=(1<<y);
}
ll MS=(1<<n),o=0;c[0]=1;
for(ll i=1;i<MS;i++)c[i]=c[i-(i&-i)]*2;
for(ll s=0;s<MS;s++){
if((s&1)!=((s>>1)&1))continue;
f[s]=1;
for(ll t=(s-1)&s;t;t=(t-1)&s){
ll buf=f[t];
for(ll i=0;i<n;i++){
if((t>>i)&1)buf=buf*(c[(s^t)&e[i]]-1)%P;
if(((s^t)>>i)&1)buf=buf*c[t&e[i]]%P;
}
(f[s]+=buf)%=P;
}
}
ll ans=1;
while(m)m--,ans=ans*2%P;
printf("%lld\n",(ans-f[MS-1]+P)%P);
return 0;
}

最新文章

  1. docker 使用非加密registry
  2. 基本概率分布Basic Concept of Probability Distributions 8: Normal Distribution
  3. vsftpd移植
  4. MVC4+WebApi+Redis Session共享练习(上)
  5. 解决CSS移动端1px边框问题
  6. 如何通过js实现图片预览功能
  7. 自定义的dialog
  8. ZOJ 3122 Sudoku
  9. 在不同版本的 IIS 上使用 ASP.NET MVC
  10. FRM-40401 No changes to save error
  11. Java中的日期处理类
  12. c# 数据库编程(利用DataSet 和 DataAdaper对象操作数据库--单表操作)
  13. BotVS开发基础—2.5 绘制图表
  14. HTML5到底将给企业带来什么?
  15. LinkedList源码和并发问题分析
  16. 第一个用eclipse打包APK时报错一个错误怎么解决
  17. Python基础综合练习
  18. Spring Boot application.yml bootstrap.yml
  19. csdn博客
  20. 大数据入门第十一天——hive详解(二)基本操作与分区分桶

热门文章

  1. MySQL主从复制与Atlas读写分离
  2. 关于int和Integer缓存(二):修改缓存大小
  3. MongoDB学习笔记三 - MongooseAPI操作数据
  4. Android开发,缺少权限导致无法修改原文件,获取所有文件访问权限的方法
  5. java8时间类API安全问题(赠送新的时间工具类哟)
  6. linux上传下载文件(转载https://www.jb51.net/article/143112.htm)
  7. excel快捷键如下:
  8. MySQL日志系统bin log、redo log和undo log
  9. 手撕LRU缓存了解一下
  10. leaflet加载离线OSM(OpenStreetMap)