• CF578F Mirror Box


    CF578F Mirror Box [* I like]

    有一个 (ncdot m) 的网格,每个格子有一个 / 或者 的镜子,镜子可以反射光。

    一个合法的网格满足从任意一个边界段垂直射进网格中,光线会从相邻的边界段射出,同时网格中的每一段都被至少一条光线穿透。

    现在有 (k) 个镜子的形状不确定,求有多少个合法的网格。

    (n,mle 100, kle 200) 答案对质数 (p) 取模。

    Solution

    有趣的图论题。不知道为啥看着就觉得是图论,然后误打误撞推出来了...(做了一下午)

    考虑将边界上的点当作点,那么镜子就是斜着连边,为了满足第二个约束,我们必然是希望不存在环形结构。

    基于观察,我们发现连边的过程中被连边的点一定满足横纵坐标的和模 (2) 相同,所以可以直接黑白染色,然后我们考虑确定黑边如何连接,不难发现此时白边固定。

    考虑满足约束的图会形如如何,只考虑黑边,我们一定是类似于通路的结构,相邻两个黑色点的间隔不能超过 (2),否则中间会有多的黑色点,那么这个黑色点也需要确定一条边,否则如果将白色边连接起来一定无法满足约束,所以中间的白色边只能顺着黑色边的方向延生。

    于是我们发现可以确定黑色边如何选,然后白色边就固定了,此时只需要黑色边没有环然后将相邻两个连通即可。

    然后假设满足了没有环,我们发现相邻两个一定是联通的,论证起来可以自己画图。

    所以只需要考虑无环的约束,此时我们发现这张图一定是一棵树,因为我们将能连的边都连了。

    然后就得到了一个 (mathcal O((nm)^3)) 的解法。

    考虑优化,发现大部分边都固定了,所以将这些连通块缩起来,再矩阵树即可,复杂度 (mathcal O(k^3+nm))

  • 相关阅读:
     随机选择数据库记录的方法
    交叉查询
    Delphi编辑器颜色设置
    Delphi Dll中多线程无法使用Synchronize同步的解决方法(转)
    Delphi FTP例子源码
    DELPHI之备忘四
    界面美化代码
    使Form响应滚轮事件
    配色卡
    Delphi http传输备忘
  • 原文地址:https://www.cnblogs.com/Soulist/p/13841580.html
Copyright © 2020-2023  润新知