\(\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. Shell中 heredoc 内容转义

    1.在$符号前面加反斜杠,如: cat > test.sh <<EOF \$test EOF 如果不加,将转成实际的值. 2.给EOF加个双引号,如: cat > test.s ...

  2. LINUX学习-Mysql集群-多主一从备份

    基本原理:从服务器开启两个线程,一个备份主1,一个备份主2. 一.准备 主1:192.168.88.20 主2:192.168.88.30 从:192.168.88.40 两个主服务器开启binlog ...

  3. 痞子衡嵌入式:在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法. 痞子衡旧文 <在IAR下将关键函数重定向到RAM中执行的方法> ...

  4. 马哈鱼血缘分析工具部署介绍--win 10

    马哈鱼血缘分析工具部署介绍--win 10 随着大数据技术的发展与普及,数据治理和数据质量变得越来越重要,数据血缘分析在业界悄然兴起并得到了广泛流行,马哈鱼是国内少有的一款专业且易用的血缘分析工具.本 ...

  5. 开发 IDEA Plugin 引入探针,基于字节码插桩获取执行SQL

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 片面了! 一月三舟,托尔斯泰说:"多么伟大的作家,也不过就是在书写自己的片 ...

  6. C++内嵌汇编 教程1

    注:本文的所有代码是在我自己的VS2008中测试的,由于环境的差别,不能保证能在所有的编译器上运行. 1.内嵌汇编介绍 在C++中,可以通过__asm关键字来嵌入汇编语言.例如 int main(){ ...

  7. VUE3 之 多个 v-model 绑定及 v-model 修饰符的使用 - 这个系列的教程通俗易懂,适合新手

    1. 概述 洛克定律告诉我们: 当我们的目标很远大,远到我们都看不到终点时,放弃几率就会很大,就像跑马拉松比赛,由于时间长.距离长,很多选手都会选择在中途放弃. 其实有个好办法,就是拆分,把大目标拆分 ...

  8. Unity——日志打印工具

    一.日志工具功能 封装Debug类,需要实现功能: 1.控制所有日志是否打印: 2.除了Log,Warning,Error外,给更多日志种类(不同颜色): 3.格式化打印日志: 4.不定参数,自动拼接 ...

  9. 人口信息普查系统-JavaWeb-二

    上次发表了人口普查系统的题目要求,今天和大家分享一下我的技术方案. 技术上用到的是html+jsp+JavaBean+servlet+JavaScript 其实现在的前端页面主流还是html,它可以实 ...

  10. [luoguP4139]上帝与集合的正确用法

    \(\text{Description}\) \(\text{Given a number }p(p\leqslant10^7).\) \(\text{Output }2^{2^{2^{2^{\cdo ...