Resolve 01 Solution
Solutions
T1 P6571 [BalticOI 2017] Political Development
看到数据范围,复杂度应该是 \(O(nk\cdot 2^k)\)。简化题面就是给一个图,满足对于任意点导出子图,存在一个节点的度数小于 \(k\),求原图的最大团。最大团的算法,参考 OI Wiki,得到这是一个 NP 算法。说明这道题肯定有 Trick。
首先,这道题没说 \(\sum deg_i\) 的数据范围,所以猜到比 \(nk\) 小。那么,假设现在 \(deg_i\le 10\),我们思考一下解决方案。枚举每一个点,计算如果当前点被包含在团中,最大团的大小。那就假设节点 \(u\) 的邻居(即与 \(u\) 有连边的节点个数,不含自身)的个数为 \(x_u\)。那复杂度可以推出是 \(O(x_u2^{x_u})\)。
回到原题,在初始的图中,肯定有一个点的度数小于 \(k\)。(理由是显然的,\(\sum deg_i\le n\times k\) 。那么,令 \(p_s\) 为当前点集 \(s\),其导出子图是否为完全子图。在计算过程中,枚举每一个点时,将与其连接的点的点集状压出来。考虑怎么转移,设当前这个点为 \(u\),与其相连的点是 \(v\) (点集)。状态 \(s\) 就可以满足转移:\(p_{(s\&v)|(2^u)}=p_s\)。

浙公网安备 33010602011771号