• [[清华集训2012]串珠子]


    [清华集训2012]串珠子


    接下来我们把整道题的主要思路简要地梳理开来。


    首先,我们先考虑最经典的问题(这经典吗???):

    旅行商问题

    不,是与之类似的一类问题:给一堆点(有顺序要求),要求有多少种方案数使这 (n) 个点构成一张连通图(无自环、重边)。

    该问题可以通过一下方法解决:

    考虑补集转化思想,将求所有的连通图的方案转化为所有图的方案(-)非连通图的方案。

    我们可以定义一个 (dp(S)) 代表最终答案( (S) 代表点集,下同),(f(S)) 代表非连通图的方案,(g(S)) 代表总方案数。

    很显然,在该集合中所有的点构成的完全图的的子图个数是总方案数。

    而对于非连通图而言,我们可以将点集中的点分为两部分——一部分为连通图、另一部分瞎搞,只要这两部分互相不连通就可以了。

    只不过为了不重不漏,我们可以对于任意一个点,考虑它所在的连通图的节点个数进行计数。

    最后我们有:

    [f(S)=sum dp(S0)*g(Ssetminus S0) ]


    回到这道题,我们可以仿照刚才的想法,补集转化去做。只不过我们这里的总方案数并不是2的整数次幂,而是每条边种数加一后,所有数的乘积后的结果。

    对于补集而言,仍然选任意一个点进行分情况计数即可。

    最后不用卡常就过了。


    总结:

    1. 经典状压问题的变形;

    2. 补集转化。

  • 相关阅读:
    xutils 上传文件 ,暂时
    UIView.FRAMEWORK
    2016.11.7
    2016.11.6新阶段开始
    远程推送
    xcode8 导入 dylib
    bugly使用
    anelife
    心阶段
    新阶段
  • 原文地址:https://www.cnblogs.com/zach20040914/p/14404224.html
Copyright © 2020-2023  润新知