【容斥、状压dp】主旋律 题解
【清华集训2014】主旋律 题解
神秘题。
题目简述
给你一个有向图 \(G=(V,E)\)。求有多少 \(E\) 的子集 \(E'\) 使得新图 \(G'=(V,E')\) 是强连通图。
强连通图的定义是任意两点 \(u,v\) 均存在 \(u\to v,v\to u\) 的路径。
\(n\leq 15,m\leq n\times(n-1)\)。
解题思路
下面记点集 \(V_1\) 导出子图的答案为 \(f(V_1)\)。我们只要求 \(f(V)\)。我们考虑对每个点集 \(V_1\subset V\) 都求出 \(f(V_1)\)。
正难则反,我们考虑他不是强连通图的方案。非强联通图缩点以后是一个 DAG,我们考虑枚举 DAG 当中所有入度为 \(0\) 的点,然后容斥即可。
更具体的,我们需要枚举所有入度为 \(0\) 的强连通分量 \(V'\subset V\),定义 \(g(V')\) 为选取的方案数,那么剩下的任务就是在 \(e^{\dagger}[V'\to V/V']\) 和 \(e[V/V'\to V/V']\)。这些边是可以任意选取的。我们不需要担心重复的问题,这应该在 \(g\) 当中就解决掉。
\(^{\dagger}\) \(e[U\to V]\) 表示起点在点集 \(U\) 终点在点集 \(V\) 的有向边数量。
总结一下上面也就是:
\]
我们再考虑 \(g(V)\) 的计算方法。\(g(V)\) 的另一种理解是缩点后两两不联通的方案再去乘上容斥系数(偶数个连通分支为 \(-1\),奇数个为 \(1\)),我们去枚举一个连通分支就可以了。也就是:
\]
其中 \(u\) 是随意选取的一个 \(V\) 中的点。要注意的是 \(V_1\) 可能等于 \(V\),所以要先计算 \(f(V)\)。
至此这题便做完了。时间复杂度 \(O(3^n\times n)\)。
参考代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MOD=1e9+7;
int n,m;
int a[20];
ll pw[205],f[1<<16],g[1<<16];
int popcount(int x){int cnt=0;while(x)cnt++,x-=(x&-x);return cnt;}
int edge(int u,int v){
int cnt=0;
for(int i=0;i<n;i++)if(u>>i&1)cnt+=popcount(a[i]&v);
return cnt;
}
void del(ll &x,ll y){x-=y;if(x<0)x+=MOD;}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;cin>>u>>v;
a[u-1]|=(1<<v-1);
}
pw[0]=1;
for(int i=1;i<205;i++) pw[i]=pw[i-1]*2%MOD;
for(int i=1;i<(1<<n);i++){
int t=(i&-i),k=i^t;// 固定一个点
for(int j=(k-1)&k;j;j=(j-1)&k) del(g[i],g[k^j]*f[j|t]%MOD);
if(t!=i) del(g[i],g[k]);
f[i]=pw[edge(i,i)];
for(int j=i;j;j=(j-1)&i) del(f[i],g[j]*pw[edge(i,i^j)]%MOD);
g[i]+=f[i];g[i]%=MOD;
}
cout<<f[(1<<n)-1];
return 0;
}
【容斥、状压dp】主旋律 题解的更多相关文章
- bzoj2669[cqoi2012]局部极小值 容斥+状压dp
2669: [cqoi2012]局部极小值 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 774 Solved: 411[Submit][Status ...
- bzoj3812 主旋律 容斥+状压 DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3812 题解 考虑对于图的联通性的 DP 的一般套路:总方案 - 不连通的方案. 那么我们只需要 ...
- ARC 093 F Dark Horse 容斥 状压dp 组合计数
LINK:Dark Horse 首先考虑1所在位置. 假设1所在位置在1号点 对于此时剩下的其他点的方案来说. 把1移到另外一个点 对于刚才的所有方案来说 相对位置不变是另外的方案. 可以得到 1在任 ...
- [BZOJ2669][CQOI2012]局部最小值(容斥+状压DP)
发现最多有8个限制位置,可以以此为基础DP和容斥. $f_{i,j}=f_{i-1,j}\times (cnt_j-i+1)+\sum_{k\subset j} f_{i-1,k}$ $cnt_j$表 ...
- POJ - 3254 Corn Fields(状压DP)题解
思路: 参照blog,用状压DP做,和题解稍微有点不一样,我这里直接储存了状态而不是索引. 这一题的问题是怎么判断相邻不能种,我们用2进制来表示每一行的种植情况.我们将每一行所能够造的所有可能都打表( ...
- FJNU Fang G and his Friends(状压DP)题解
Description 众所周知,fang G 有很多小伙伴,有一天,Fang G 打算带他们去玩有趣的游戏OOXX,这个游戏需要分成两组,有趣的是,每个人互相之间都有一个满意度,大家都想和自 ...
- [状压DP]P1441 题解 砝码称重
前置知识:状压DP 洛谷传送门 emm....看到题目,我第一个想到的就是枚举.暴力大法好! 具体怎么枚举?当然是子集枚举啦!枚举出每一个可能的砝码选择方案.对于每一个合法的(也就是选取数量等于\(n ...
- POJ 2923 Relocation(状压DP)题解
题意:有2辆车运货,每次同时出发,n(<10),各自装货容量c1 c2,问最少运几次运完. 思路:n比较小,打表打出所有能运的组合方式,用背包求出是否能一次运走.然后状压DP运的顺序. 代码: ...
- HDU 4272 LianLianKan(状压DP)题解
题意:一个栈,每次可以选择和栈顶一样的数字,并且和栈顶距离小于6,然后同时消去他们,问能不能把所有的数消去 思路:一个数字最远能消去和他相距9的数,因为中间4个可以被他上面的消去.因为还要判断栈顶有没 ...
- HDU 4628 Pieces(状压DP)题解
题意:n个字母,每次可以删掉一组非连续回文,问你最少删几次 思路:把所有回文找出来,然后状压DP 代码: #include<set> #include<map> #includ ...
随机推荐
- 乌班图安装docker
目录 一.前言 二.安装 2.1 设置仓库 2.3 安装 Docker Engine 2.4 安装特定版本的 Docker Engine: 2.5 测试 三.配置非 root 用户运行 Docker ...
- 从嘉手札<2023-12-15>
荒原 朔方 2023.12.15 人生实属是很愁的时间 愁到听不见一点雪花飘落的声音 愁到连随便写点文章都算得上拼尽全力 萧瑟的北风吹散了为数不多的倔强 漫天的雪花飞舞 埋葬的是那么多年走过的春秋 ...
- RabbitMQ高级知识(消息可靠性,死信交换机,惰性队列,MQ集群)
服务异步通信-高级篇 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经历多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: ...
- C# WinForm线程里操作控件
做winform程序,避免不了的要在线程里控制窗体上的控件,直接在子线程里操作控件会报错"线程间操作无效,从不是创建控件***的线程访问它". 解决方法: private void ...
- ubuntu离线安装tcpdump
环境 Distributor ID: Ubuntu Description: Ubuntu 16.04.5 LTS Release: 16.04 Codename: xenial 准备安装包 tcpd ...
- 苹果iOS 17.2年底推送:iPhone 15 Pro的自定义操作按钮功能升级
据报道,苹果会在年底推送iOS 17.2版本,新版系统将会修复iPhone 15系列WiFi速度慢的问题. 与此同时,iOS 17.2将会带来翻译功能,iPhone 15 Pro的自定义操作按钮切换到 ...
- MyISAM存储引擎的表级锁
MyISAM存储引擎的表级锁 如果了解过文件锁的用法,那理解数据库锁就简单了.锁其实就协调多个进程或线程并发时,处理访问同一个资源的机制.在项目开发中,表锁是MySQL中作用范围较大的一种锁,它锁定的 ...
- ABC311_g One More Grid Task 题解
题目链接:Atcoder 或者 洛谷 对于解决二维区间内的最值类型问题,我们常常有一类特别好用的方法,就是悬线法,它可以看做是单调栈的子集,但更加好理解和书写. 对于悬线法,我们有一个常见的模型,找出 ...
- Build 和 Compile 区别
- 一份55页Java性能调优PPT分享
提起"肖桦"这个人,相信很多小伙伴对他比较陌生.除去现任唯品会资深技术专家头衔外,他更为技术圈所熟知的是他的著名开源项目:SpringSide. SpringSide是以sprin ...