zoukankan      html  css  js  c++  java
  • 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))

  • 相关阅读:
    一些经验
    倍增(在线)求LCA
    IDA*算法——骑士精神
    A*算法——第K短路
    (持续更新)一些黑科技和技巧
    逆元
    方便人类——信息学训练专用库
    PHP单点登陆
    PHP 中运用 elasticsearch
    PHP斐波那契数列
  • 原文地址:https://www.cnblogs.com/Soulist/p/13841580.html
Copyright © 2011-2022 走看看