【UR #21】挑战最大团

题面

定义一个简单无向图 \(G\) 是“优美”的,当且仅当对 \(G\) 中任意四个不同点 \(A,B,C,D\),若 \(AB,BC,CD\) 间均有边,则 \(AC,BD,AD\) 间不可能同时没有边(即要么 \(AC\) 有边,要么 \(BD\) 有边,要么 \(AD\) 有边)。

给定一个 \(n\) 个点的“优美”的简单无向图 \(G\) ,你要对所有 \(i=1\sim n\),求出 \(G\) 中有多少个点集子集的生成子图同构于 \(i\) 个点的完全图。对 \(998244353\) 取模。

数据范围: \(n\le 8000\) 。边按照领接矩阵输入。

题解

既然题目告诉你这是个优美的图,所以肯定要去分析其中的性质的。

性质一:优美的图的子图和补图仍然是优美的,并且优美的图和它的补图不能同时连通。

这个的证明可以在官方题解中学习,只能说想不到(估计也注意不到)。

有了这个优美的性质,我们考虑如何计算。

对于一个图 \(G\),我们设 \(F_{G}(x)\) 为其生成函数。

  • 若图 \(G\) 正图不连通,那么我们就不能同时选两个联通块的点,所以 \(F_{G}(x)=\sum_{T\text{是连通块}} F_{T}(x)\)
  • 若图 \(G\) 补图不连通,那么只要各个补图连通块内成团,联通块之间是可以任选的,所以 \(F_{G}(x)=\prod_{T\text{是连通块}} F_{T}(x)\)

所以就有暴力,我们之间用 BFS 判断连通性,找到连通块就递归求解。

现在考虑优化。

既然是分裂,我们能不能用启发式分裂的思想,使得两个联通块之间大小差不多,或者如果能够分裂成大小为 \(x\)\(y\) 的部分,我们的复杂度是关于 \(\min(x,y)\) 的呢?

第一种很明显是不行的,因为分裂的方案是根据图固定的。

那么我们就考虑第二种思想。

性质二:无论正图还是补图,只要联通,那么这个图的直径为 \(2\)

因为补图不联通,所以对于点 \(x\) ,可以一步到达所有在补图中与 \(x\) 不是同一联通块的点,之后一步再到达与 \(x\) 是同一连通块的点。

而且对于一个图,设其正图最小度数的点为 \(x\),那么如果正图不联通,那么最小的一个连通块大小就是 \(\deg_x\),补图同理。

设补图度数最小的为 \(y\) ,所以我们可以找到其中度数更小的 (先假设是 \(x\)\(y\) 的情况是一样的)然后先找到与 \(x\) 相连的点,然后只扫描这些点的边,判断是否能遍历整个图,如果不能那么就找到了,递归即可,而没有找到,再尝试 \(y\)

这样一次的复杂度是 \(O(\deg_x)\) ,总复杂度就是 \(O(n^2\log n)\) 的。

通过bitset优化遍历的过程可以让复杂度降至 \(O(\frac{n^2\log n}{w}+n^2)\)

启发

  • 一种新的启发式的操作形式:

    在合并/分裂的时候,如果能够合并把 \(x,y\rightarrow x+y\)\(x+y\rightarrow x,y\) ,并且复杂度是关于 \(\min(x,y)k\) ,那么整个的复杂度就是 \(O(nk\log n)\) 的。

  • bitset可以优化判断图联通的情况。

posted @ 2022-07-14 22:46  qwq_123  阅读(66)  评论(1编辑  收藏  举报