\(\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. 机器学习|线性回归算法详解 (Python 语言描述)

    原文地址 ? 传送门 线性回归 线性回归是一种较为简单,但十分重要的机器学习方法.掌握线性的原理及求解方法,是深入了解线性回归的基本要求.除此之外,线性回归也是监督学习回归部分的基石. 线性回归介绍 ...

  2. Docker之Docker Machine已弃用

    作为刚开始学习docker的新手,从网上查询文档无疑是最快的学习捷径,但是这次在docker翻车了,困扰了整整三天,特记录一下. 一般我们使用docker for windows安装,一路往下点直至安 ...

  3. openGL绘图基本框架

    openGL绘图入门和导入外部文件 本文主要介绍通用绘图软件openGL的数据类型和基本的绘图框架,此外还提供了导入obj外部文件的方法,提供的代码稍作修改即可使用,希望能方便初学者快速上手. ope ...

  4. WEB开发的相关知识(Tomcat)

    Internet上供外界访问的Web资源分为 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访 ...

  5. 5.14-HTTP间通信

    1.社长社员通信WEBSOCKET WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输.但它跟 HTTP 没什么关系,它是一种基于 TCP 的一种独立实现. 以前客户端想知道 ...

  6. 【小记录】android命令行程序发生coredump后读取堆栈信息

    一开始执行: adb shell cd /data/local/tmp ulimit -c unlimited ./xxx 然后查看coredump文件信息: adb pull /data/local ...

  7. C++模板之成员模板和模板构造函数

    namespace myspace6 { template<typename T1> class TC { public: template<typename T2> TC(T ...

  8. golang中的RPC开发-2

    RPC简介 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程 如果 ...

  9. Kubernetes:故障排查(Trouble Shooting)方法总结

    Blog:博客园 个人 本文部分内容源自网络,侵删. 概述 为了跟踪和发现在Kubernetes集群中运行的容器应用出现的问题,我们常用如下排查方法: 查看Kubernetes对象的当前运行时信息,特 ...

  10. [源码分析] Facebook如何训练超大模型---(4)

    [源码分析] Facebook如何训练超大模型 --- (4) 目录 [源码分析] Facebook如何训练超大模型 --- (4) 0x00 摘要 0x01 背景知识 1.1 单精度.双精度和半精度 ...