非常神仙的状压DP+容斥原理。

首先,给出一个状压方程:$f_S$表示点集为$S$的情况下,整个点集构成强连通图的方案数。

这个DP方程还是比较容易想到的,但是没有办法正常转移,考虑通过容斥原理进行转移。

对于一个点集,它无法构成强连通分量的方案,就是我们选择一个出度为$0$的强连通分量,这个强连通分量并不包含整体的方案,就是无法构成的方案数,也就是缩点后的图是一个至少两个节点的DAG。

那么,我们可以钦定一个点集$j,j\subset S$作为出度为$0$的强连通分量,那么可以得到,这样其他的不是从这个点集连向其他点集的边是随意选取的,也就是$2^p$种方案。

但是由于我们不知道$S-j$的部分中有没有出现出度为$0$的强连通分量,如果出现,那么就重复计算了。

所以考虑容斥,$t_i$表示$i$点集构成点数大于1的DAG的方案数,$t_S=\sum\limits_{j\subseteq S,j\ne 0}{(-1)^{|j|-1}\times 2^{way_{i-j,j}}}\times t_{i-j}$,其中$way_{j,i-j}$表示$i-j$点集向$j$点集链接的边,$|j|$表示选择的强连通分量集的强连通分量数量。

上面的式子应该会很好理解,就不多解释了,那么根据上面的式子,我们提出一个建设性的想法,$g_i$表示$i$的点集中,构成奇数个互不连通强连通分量-构成偶数个互不连通强连通分量的方案数,也就是说在状态中直接包含容斥系数,那么可以给出方程:$g_S=f_S-\sum\limits_{j\subseteq S,u\in j}g_{S-j}\times f_j$

这个式子的正确性关键在于$g_S$构成的强连通分量是互不连通(因为出度全部为$0$)的,所以这样转移显然是正确的。

那么接下来考虑$f_S$如何更新。

同样,我们回到上面的式子,$t_S$可以表达为:$t_S=\sum\limits_{j\subset i,j\ne 0}g_j\times 2^{sum_S-w_j}$,$w_j$表示$j$连向$S$的边数。

然后,$f_S=2^{sum_S}-t_S$

然后我们就解决这道题啦!撒花撒花✿✿ヽ(°▽°)ノ✿

建议搭配下面文档食用

https://files-cdn.cnblogs.com/files/Winniechen/BZOJ3812.pdf

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <iostream>
#include <bitset>
using namespace std;
#define N (1<<15)+20
#define ll long long
#define mod 1000000007
int f[N],g[N],cnt[N],in[N],out[N],n,m,b[N],w[N],sum[N];
void dfs(int i,int j)
{
if(i&(j-1))dfs(i,i&(j-1));
w[j]=w[j-(j&-j)]+cnt[in[j&-j]&i];
}
int main()
{
scanf("%d%d",&n,&m);b[0]=1;
for(int i=1,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);x--,y--;
in[1<<x]|=1<<y,out[1<<y]|=1<<x;
b[i]=(b[i-1]<<1)%mod;
}
for(int S=1;S<1<<n;S++)
{
int x=S&-S,s=S^x;cnt[S]=cnt[s]+1;sum[S]=sum[s]+cnt[in[x]&S]+cnt[out[x]&S];
dfs(S,S);f[S]=b[sum[S]];
for(int j=s;j;j=s&(j-1))g[S]=(g[S]-(ll)f[S^j]*g[j])%mod;
for(int j=S;j;j=S&(j-1))f[S]=(f[S]-(ll)g[j]*b[sum[S]-w[j]])%mod;
g[S]=(g[S]+f[S])%mod;
}
printf("%d\n",(f[(1<<n)-1]+mod)%mod);
}

  

BZOJ 3812 : 主旋律的更多相关文章

  1. BZOJ 3812 主旋律 (状压DP+容斥) + NOIP模拟赛 巨神兵(obelisk)(状压DP)

    这道题跟另一道题很像,先看看那道题吧 巨神兵(obelisk) 题面 欧贝利斯克的巨神兵很喜欢有向图,有一天他找到了一张nnn个点mmm条边的有向图.欧贝利斯克认为一个没有环的有向图是优美的,请问这张 ...

  2. bzoj 3812: 主旋律 [容斥原理 状压DP]

    3812: 主旋律 题意:一张有向图,求它的生成子图是强连通图的个数.\(n \le 15\) 先说一个比较暴力的做法. 终于知道n个点图的是DAG的生成子图个数怎么求了. 暴力枚举哪些点是一个scc ...

  3. BZOJ 3812主旋律

    求一个图中强联通图的个数. 一看就是容斥啦,但这种二进制高端操作还是学习一下Candy?dalao 注释在代码里 好久没更了... #include<bits/stdc++.h> usin ...

  4. 【BZOJ 3812】 3812: 主旋律 (容斥原理**)

    3812: 主旋律 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 235  Solved: 196 Description 响应主旋律的号召,大家决定 ...

  5. Solution -「BZOJ 3812」主旋律

    \(\mathcal{Description}\)   Link.   给定含 \(n\) 个点 \(m\) 条边的简单有向图 \(G=(V,E)\),求 \(H=(V,E'\subseteq E)\ ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  8. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  9. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

随机推荐

  1. 从零开始学习html(十二)CSS布局模型——下

    五.什么是层模型? 什么是层布局模型?层布局模型就像是图像软件PhotoShop中非常流行的图层编辑功能一样, 每个图层能够精确定位操作,但在网页设计领域,由于网页大小的活动性,层布局没能受到热捧. ...

  2. vue中监听window.resize的变化

    我只想说每个人遇到的bug真的不能一概而论,解决办法也会有不同.在vue中使用echarts的时候,会想要实现window.resize窗体变化大小的时候让图形大小跟着变化.实现的过程中各种bug,也 ...

  3. css 给inline和inline-block元素设置margin和padding

    经过简单的测试,行内元素或者行内块元素的maring-left,margin-right,padding-left,padding-right都是可以正常表现的,下面来看一下剩下的margin-top ...

  4. 一文读懂商业智能(BI):企业数据分析的中枢

    商业智能(BI)大家可能早已耳熟能详.从早期的报表自动化,到现在的复杂灵活分析,多平台支持,优秀的人机互动,多数据抽取,大数据整合,甚至和当下最火的人工智能都有结合点.可能一提到BI,大家都会自然而然 ...

  5. 学习笔记(5)——实验室集群LVS监控Web界面配置

    症状:通过虚拟IP能访问到监控页面:http://192.168.253.110/ipvsadm.php,但是却无法读出LVS任务分发及集群负载信息. 打开ipvsadm.php页面,源码如下: &l ...

  6. 华Xia相机WEB后台设置

    1:设备维护->设备信息:出入口类型:入口2:更多参数->屏显参数:屏显协议18 3:更多参数->外设参数:RS581-1 串口使能勾上 串口工作模式 屏显控制 96004:更多参数 ...

  7. AndroidKiller报.smali文件丢失问题解决(关闭Android Studio的Instant Run)

    第一节编写一个Android程序里我们生成了一个验证激活码的apk,当我们输入的激活码正确时才能注册成功,输入错误时注册失败. 现在我们想输入错误的激活码也能注册.我们用Android反编译工具进行反 ...

  8. Expo大作战(二十八)--expo sdk api之Speach(语音文字转换),Segment

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  9. IAM页面是在统一区分配的还是在混合区分配的?

    IAM页面是在统一区分配的还是在混合区分配的? IAM页面的作用这里就不说了,网上的资料很多 文章中用到的工具:查看SQLSERVER内部数据页面的小插件Internals Viewer 先建立四张表 ...

  10. 在 Windows 上创建虚拟机规模集和部署高度可用的应用

    利用虚拟机规模集,可以部署和管理一组相同的.自动缩放的虚拟机. 可以手动缩放规模集中的 VM 数,也可以定义规则,以便根据资源使用情况(如 CPU 使用率.内存需求或网络流量)进行自动缩放. 在本教程 ...