【容斥、状压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 ...
随机推荐
- C/C++ 实现简易HTTP服务器
#include <stdio.h> #include <stdlib.h> #include <process.h> #include <WinSock2. ...
- 从嘉手札<2023-12-15>
荒原 朔方 2023.12.15 人生实属是很愁的时间 愁到听不见一点雪花飘落的声音 愁到连随便写点文章都算得上拼尽全力 萧瑟的北风吹散了为数不多的倔强 漫天的雪花飞舞 埋葬的是那么多年走过的春秋 ...
- 使用Miniconda安装R语言环境
使用Miniconda安装R语言 下载Miniconda3-latest-Linux-x86_64.sh 静默安装 sh Miniconda3-latest-Linux-x86_64.sh -b -p ...
- centos离线安装chrony
环境 CentOS Linux release 7.9.2009 (Core) 工具 chrony-2.2.1.tar.gz 下载地址:https://download.tuxfamily.org/c ...
- Windows开机自动同步时间
前言 有些Windows客户端因主板电池没电或其他原因,每次启动系统后,读取到BIOS的时间是初始时间(1970年)或错误的时间,这时需要系统启动后立即向时间服务器同步一次时间. 该方法是添加 ...
- 英特尔发布酷睿Ultra移动处理器:Intel 4制程工艺、AI性能飙升
英特尔今日发布了第一代酷睿Ultra移动处理器,是首款基于Intel 4制程工艺打造的处理器. 据了解,英特尔酷睿Ultra采用了英特尔首个用于客户端的片上AI加速器"神经网络处理单元(NP ...
- U390630 分考场题解
题目链接:U390630 分考场 本题来自于2019年蓝桥杯国赛的题.在洛谷上也被标为了假题.原因是首先官方在需要输出浮点数的情况下,并没有开启spj,并且官方所给的数据当中,总有一两个数据以不知道到 ...
- 教你用Java实现动态调色板
案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用Java编程实战案例,做一个动态调色板.案例界面会出现三个滑动组块以及对应的数值,通过移动滑块可以改变颜色区域的显示.通过实 ...
- 【调试】pstore原理和使用方法总结
什么是pstore pstore最初是用于系统发生oops或panic时,自动保存内核log buffer中的日志.不过在当前内核版本中,其已经支持了更多的功能,如保存console日志.ftrace ...
- 思维分析逻辑 5 DAY
目录 如何分析 结构分析 对比分析 时间序列 相关性分析 机器学习 报告撰写 报告撰写三原则 标准化报告的组成 AB测试 AB测试流程 AB测试注意事项 如何分析 结构分析 对比分析 对比分析:所有的 ...