求一个图中强联通图的个数。

一看就是容斥啦,但这种二进制高端操作还是学习一下Candy?dalao

注释在代码里

好久没更了。。。

 #include<bits/stdc++.h>
using namespace std;
const int N=(<<)+,mod=1e9+;
typedef long long ll;
int n,m,x,y,f[N],g[N],h[N],one[N],w[N],in[N],out[N];
ll bin[N];
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;++i)
{
scanf("%d%d",&x,&y);
out[<<x-]|=(<<y-);in[<<y-]|=(<<x-);
}
bin[]=;
for(int i=;i<=m;++i)bin[i]=bin[i-]*%mod;
for(int s=;s<<<n;s++)one[s]=+one[s^(s&-s)];
for(int s=;s<<<n;s++){
int p=s&-s,ns=s^p;
for(int t=ns;t;t=(t-)&ns)
g[s]=(g[s]-1ll*f[s^t]*g[t]%mod)%mod;
h[s]=h[ns]+one[in[p]&ns]+one[out[p]&ns];//如何求一个诱导子图中边数
f[s]=bin[h[s]];
for(int t=s;t;t=(t-)&s){
int p=(s^t)&-(s^t);
if(t==s)w[t]=;
else w[t]=w[t^p]-one[out[p]&(s^t)]+one[in[p]&t];//求两个点集间的边数
f[s]=(f[s]-1ll*g[t]*bin[w[t]+h[s^t]]%mod)%mod;
}
if(f[s]<)f[s]+=mod;
g[s]=(g[s]+f[s])%mod;
}
printf("%d",f[(<<n)-]);
return ;
}

最新文章

  1. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
  2. CI 3.0.6 控制器打印base_url 地址不为 localhost的解决方法
  3. vuejs - the component is a fragment instance
  4. 资源搜集:Git精品文章推荐,常年更新
  5. Python强化训练笔记(三)——词频的统计
  6. 转 java int与Integer的区别
  7. centos7安装mysql
  8. javaSE第十四天
  9. 解决SecureCRT中文显示乱码
  10. ImportError: cannot import name webdriver问题解决
  11. struts(二)——struts框架实现的基本原理
  12. vue项目中解决type=”file“ change事件只执行一次的问题
  13. INotifyPropertyChanged 接口 CallerMemberName属性
  14. 海康威视(iOS集成)
  15. &lt;转&gt;ajax 同步异步问题
  16. LOJ #559. 「LibreOJ Round #9」ZQC 的迷宫
  17. Python Web学习笔记之socket套接字
  18. touch事件(寻找触摸点 e.changedTouches)
  19. binlog cache size设置是否合理判断
  20. oracle ORA-01722:无效数字 记录

热门文章

  1. 使用Arraylist将数组中元素随机均等乱序分为N个子数组
  2. nodejs npm install -g 全局安装
  3. python3中__get__,__getattr__,__getattribute__的区别
  4. jQuery中Animate进阶用法(三)
  5. Anaconda+django写出第一个web app(九)
  6. C++ 修饰符类型
  7. Jmeter如何保持cookie,让所有请求都能用同一个cookie,免去提取JSESSIONID
  8. spring如何管理mybatis(二) ----- SqlSession的线程安全性
  9. Nessus+Metasploit
  10. Linux下JDK到底应该安装在哪儿?