[ABC213G] Connectivity 2 题解
好好好。
我们设当前处理 \(i\) 的答案,那么最后的图就可以分成两个部分:\(1\) 所在的联通块和其他,根据乘法原理,答案就是它们二者方案的乘积。
设 \(f_s\) 表示集合 \(s\) 中所有点联通时图的情况数,\(g_s\) 表示集合 \(s\) 中所有点不一定联通时图的情况数,则有:
\]
其中 \(s'\) 表示 \(s\) 相对于 \(\{1,2,\dots,n\}\) 这个集合的补集。预处理 \(f_s,g_s\) 的情况下,该部分时间复杂度为 \(O(n2^n)\)。
那么现在就要求 \(f_s\) 和 \(g_s\) 了。
\(g_s\) 好说,设 \(dis_{i,j}\) 表示 \(i,j\) 间有没有边,则:
\]
时间复杂度 \(O(n^22^n)\)。
考虑 \(f_s\)。我们暴力出奇迹,强制设一个点 \(v\in s\),将原图划分成两张图,一张有 \(v\),必须连通;一张没 \(v\),不要求连通。这种情况下,我们已经构造出了所有的不连通图情况,那么用 \(g_s\) 减去它,就是 \(f_s\) 的值,即:
\]
由于要枚举子集,所以时间复杂度 \(O(3^n)\)。
总体时间复杂度 \(O(3^n+n^22^n)\)。
#include<bits/stdc++.h>
using namespace std;
const int N=20,M=1<<17;
const int p=998244353;
int n,dis[N][N],f[M];
int m,g[M],tw[N*N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m,g[0]=1,tw[0]=1;
for(int i=1,u,v;i<=m;i++)
cin>>u>>v,dis[u][v]=1,tw[i]=tw[i-1]*2%p;
for(int s=1,cnt=0;s<(1<<n);s++,cnt=0){
for(int i=1;i<n;i++)
if((s>>(i-1))&1)
for(int j=n;j>i;j--)
cnt+=((s>>(j-1))&1)*dis[i][j];
f[s]=g[s]=tw[cnt];int v=log2(s)+1;
for(int t=(s&(s-1));t;t=((t-1)&s))
if((1<<(v-1))&t) f[s]=(f[s]-1ll*f[t]*g[s^t]%p+p)%p;
}for(int i=2,sum=0;i<=n;i++,sum=0){
for(int s=1;s<(1<<n);s+=2) if((s>>(i-1))&1)
sum=(sum+1ll*f[s]*g[((1<<n)-1)^s]%p)%p;
cout<<sum<<"\n";
}return 0;
}
[ABC213G] Connectivity 2 题解的更多相关文章
- CoderForces Round526 (A~E)题解
A. The Fair Nut and Elevator time limit per test 1 second memory limit per test 256 megabytes input ...
- [题解] Codeforces Global Round 22 1738 A B C D E F 题解
很久没rated打过cf的比赛了,这次打得还行,至少进前100了 点我看题 A. Glory Addicts 把类型0的数放进数组a里,类型1的数放进数组b里.如果\(|a|=|b|\),你可以把所有 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- Euler Tour Tree与dynamic connectivity
Euler Tour Tree最大的优点就是可以方便的维护子树信息,这点LCT是做不到的.为什么要维护子树信息呢..?我们可以用来做fully dynamic connectivity(online) ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
随机推荐
- VLM-OCR-Demo:一个使用VLM用于OCR任务的示例
前言 上一篇文章TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面中我们构建了一个方便使用TesseractOCR的用户界面,今天构建一个类似的界面,使用 ...
- nvm安装node.js无法使用
前情 最近在使用某此第三方模块需要依赖不同的node版本,于是想通nvm来管理node版本 坑 网上下载nvm-window的安装包,一步步傻瓜式安装下去,发现nrm无法使用,设置环境变量也没有用,再 ...
- logback 中打印自定义参数 (ip 服务名)
打印 application.properties 配置文件中的参数 首先需要引入文件 <property resource="application.properties" ...
- Qt/C++编写跨平台的推流工具(支持win/linux/mac/嵌入式linux/安卓等)
一.前言 跨平台的推流工具当属OBS最牛逼,功能也是最强大的,唯一的遗憾就是多路推流需要用到插件,而且CPU占用比较高,默认OBS的规则是将对应画布中的视频画面和设定的音频一起重新编码再推流,意味着肯 ...
- Qt音视频开发21-通用硬解码
一.前言 硬件解码是图形芯片厂家提出的用GPU资源解码视频流的方案,与之相对的是软解,也就是传统的用CPU承担解码工作的方案:优点是效率高,功耗低.热功耗低,缺点是缺乏有力的支持(包括滤镜.字幕等), ...
- [转]CMake学习笔记(一)基本概念介绍、入门教程及CLion安装配置
原文链接:CMake学习笔记(一)基本概念介绍.入门教程及CLion安装配置
- Intellij IDEA部署Web项目到tomcat时提示:Error:Cannot build Artifact ':war exploded' because it is included into a circul
在Idea中使用Maven创建父子工程,第一个Model的那个项目可以很好的运行,在创建一个Model运行时报这个错.原因是tomcat部署了多个Web项目,可能最开始是两个项目的配置文件混用用,最后 ...
- 阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践
本文由阿里闲鱼技术团队有攸分享,原题"向消息延迟说bybye:闲鱼消息及时到达方案",有修订和改动,感谢作者的分享. 1.引言 IM消息作为闲鱼用户重要的交易咨询工具,核心目标有两 ...
- LRU的map+双链表实现(Go描述)
面云账户时候问了LRU,具体实现的方式是map+双链表.Set和Get的时间复杂度都是O(1).完整写一遍复习一下, 仅作记录 /** * @Author: lzw5399 * @Date: 2021 ...
- python-nmap实现python利用nmap扫描分析
目录 前言 python-nmap的基本使用 PortScanner扫描 PortScannerAsync异步扫描 python-nmap的源码分析 前言 Nmap是一个非常用的网络/端口扫描工具,如 ...