\(\mathcal{Description}\)

  Link.

  给定简单无向图 \(G=(V,E)\),点的编号从 \(1\) 到 \(|V|=n\)。对于 \(k=2..n\),求 \(H=(V,E'\subseteq E)\) 的个数,使得 \(1\) 与 \(k\) 连通。

  \(n\le17\)。

\(\mathcal{Solution}\)

  一种在状压 DP 子集枚举时的去重 trick√

  令 \(f(S)\) 表示仅考虑点集 \(S\) 的导出子图时,使得点集 \(S\) 连通的选边方案数。设 \(\operatorname{inc}(S)\) 表示点集 \(S\) 的导出子图的边数,考虑一个错误的转移:

\[f(S)=2^{\operatorname{inc}(S)}-\sum_{T\subsetneq S}2^{\operatorname{inc}(S\setminus T)}f(T)
\]

由于在非法方案中,点集 \(S\) 可能包含多个极大连通块,所以这样转移会算重。但我们可以钦定某个特殊结点 \(u\in S\),仅考虑包含 \(u\) 的连通块和除这个连通块的其余部分,就能避免重复计数,得到转移

\[f(S)=2^{\operatorname{inc}(S)}-\sum_{T\subsetneq S,u\in T}2^{\operatorname{inc}(S\setminus T)}f(T)
\]

  求出 \(f\) 之后就能随便求得答案了。复杂度 \(\mathcal O(3^n)\),可用 FWT 优化。

\(\mathcal{Code}\)

/*~Rainybunny~*/

#include <cstdio>

#define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i ) const int MAXN = 17, MAXM = 136, MOD = 998244353;
int n, m, pwr[MAXM + 5], inc[1 << MAXN], ans[MAXN + 5], f[1 << MAXN]; inline void subeq( int& a, const int b ) { ( a -= b ) < 0 && ( a += MOD ); }
inline int mul( const int a, const int b ) { return int( 1ll * a * b % MOD ); }
inline void addeq( int& a, const int b ) { ( a += b ) >= MOD && ( a -= MOD ); } int main() {
scanf( "%d %d", &n, &m ), pwr[0] = 1;
rep ( i, 1, m ) {
addeq( pwr[i] = pwr[i - 1], pwr[i - 1] );
int u, v; scanf( "%d %d", &u, &v ), --u, --v;
rep ( S, 0, ( 1 << n ) - 1 ) inc[S] += S >> u & 1 && S >> v & 1;
}
rep ( S, 0, ( 1 << n ) - 1 ) {
int& cur = f[S] = pwr[inc[S]];
for ( int T = S & ( S - 1 ); T; T = ( T - 1 ) & S ) if ( T & S & -S ) {
subeq( cur, mul( f[T], pwr[inc[S ^ T]] ) );
}
if ( !( S & 1 ) ) continue;
int v = mul( f[S], pwr[inc[( ( 1 << n ) - 1 ) ^ S]] );
rep ( i, 1, n - 1 ) if ( S >> i & 1 ) addeq( ans[i], v );
}
rep ( i, 1, n - 1 ) printf( "%d\n", ans[i] );
return 0;
}

Solution -「ABC 213G」Connectivity 2的更多相关文章

  1. Solution -「ABC 219H」Candles

    \(\mathcal{Description}\)   Link.   有 \(n\) 支蜡烛,第 \(i\) 支的坐标为 \(x_i\),初始长度为 \(a_i\),每单位时间燃烧变短 \(1\) ...

  2. Solution -「ABC 215H」Cabbage Master

    \(\mathcal{Description}\)   Link.   有 \(n\) 种颜色的,第 \(i\) 种有 \(a_i\) 个,任意两球互不相同.还有 \(m\) 个盒子,每个盒子可以被放 ...

  3. Solution -「ABC 213H」Stroll

    \(\mathcal{Description}\)   Link.   给定一个含 \(n\) 个结点 \(m\) 条边的简单无向图,每条边的边权是一个常数项为 \(0\) 的 \(T\) 次多项式, ...

  4. Solution -「ABC 217」题解

    D - Cutting Woods 记录每一个切割点,每次求前驱后驱就好了,注意简单判断一下开闭区间. 考场上采用的 FHQ_Treap 无脑莽. #include <cstdio> #i ...

  5. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  6. Solution Set -「ABC 217」

      大家好屑兔子又来啦! [A - Lexicographic Order]   说个笑话,\(\color{black}{\text{W}}\color{red}{\text{alkingDead} ...

  7. Solution -「ARC 110E」Shorten ABC

    \(\mathcal{Description}\)   Link.   给定长度为 \(n\),包含 A, B, C 三种字符的字符串 \(S\),定义一次操作为将其中相邻两个不相同的字符替换为字符集 ...

  8. Solution -「CTS 2019」「洛谷 P5404」氪金手游

    \(\mathcal{Description}\)   Link.   有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...

  9. Solution -「BZOJ 3812」主旋律

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

随机推荐

  1. 2.OSI各层概述

    应用层 1.用户与网络的界面,所有能和用户交互产生网络流量的程序 典型应用层服务:FTP.SMTP.HTTP 表示层 1.用于处理在两个通信系统中交换信息的标识方式 功能1:数据格式变换(翻译) 功能 ...

  2. spring cloud feign 报错 feign.FeignException$MethodNotAllowed: status 405 reading 解决

    1.前言 出现报错 feign.FeignException$MethodNotAllowed: status 405 reading XXXXX 需要检查 接口的请求参数是否一致 请求参数是否正确添 ...

  3. vue特效网站集锦

    1.17素材网 http://www.17sucai.com/pins/tag/7012.html

  4. nginx+php环境搭建详解(Linux)

    今天在内网环境下,给linux主机安装nginx+php环境,由于是内网环境,只能手动解压缩包进行安装,在这过程中我也着实遇到了一些问题(困扰了我许久),还好最后搭建环境成功了,所以写篇博客记录一下, ...

  5. 2022 跳槽涨薪必不可少面试通关宝典 —— css 篇

    生于忧患死于安乐!已经居家隔离 23 天了,解封以后估计就得找工作了,提前准备起来!需要的赶紧收藏起来 一.谈谈你对 BFC 的理解及作用. BFC 是 Block Formatting Contex ...

  6. 基于Node和Electron开发了轻量版API接口请求调试工具——Post-Tool

    Electron 是一个使用 JavaScript.HTML 和 CSS 构建桌面应用程序的框架. 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 Java ...

  7. Javascript对象数据类型(键值对)的创建和使用方法

    对象数据类型(键值对) 1.创建键值对 var arry={name:"小明",age:20,isgey:falet} // var 键值对名 = {键:值,键:值} 2.增加键值 ...

  8. CMake语法—内置变量

    目录 CMake语法-内置变量 1 CMake变量分类 1.1 普通变量 1.2 缓存变量 1.3 环境变量 1.4 内置变量 2 CMake内置变量分类 2.1 提供信息的变量 2.2 改变行为的变 ...

  9. Activity Fragment Service生命周期图

    service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started service 被开启的service通过其他组件调用 startService()被创建. 这种 ...

  10. WebGPU图形编程(2):构建一个单色的三角形<学习引自徐博士教程>

    非常兴奋,我坚持了下来,开始更新我的第二篇博客,还是关于WebGPU的,我在学习过程中,对这项技术非常感兴趣,即使它非常抽象,难以理解,因为我看到未来Web3D的发展,WebGPU会成为主流技术,学习 ...