• P5332 【[JSOI2019]精准预测】


    每个火星人在每个时刻只有死或者生两种状态,所以我们考虑拆点2-sat。

    对于每个火星人在每个时刻拆成一个点,然后对于连边就按照题目描述模拟。

    如果一个火星 (i)(t) 时刻或者,那么其在 (t-1) 时刻也一定或者。如果其在 (t) 时刻死亡,那么在 (t+1) 时刻也一定死亡。

    这样我们就得到了一个暴力的建图方式,时空复杂度是 (O(nT+m))。无法通过此题。

    考虑有用的时间状态,其实就是所有与 (m) 个条件有关的时间和 (T+1),那么我们就可以把时空复杂度降为 (O(n+m))

    接下来的问题是如何求解答案,我们对于每个火星人求出当其在 (T+1) 时刻活着时,有多少个火星人一定死亡。这个我们可以直接在缩点后的dag上跑有向图连通性(由于会算重不能直接统计个数),用bitset可以在 (O(frac{n^2}{w})) 的时间复杂度内实现。但是空间不太允许,那么我们就把关键点(死亡点)拆成若干份,每份 (D) 个点,这样空间复杂度降为 (O(frac{nD}{w})),时间复杂度为 (O(frac{n^3}{Dw})),当 (D=10^4) 时就可以通过此题。

    注意这题有一个恶心的地方,如果一个点活着可以推出他死了,那么他一定是死的。

    code

  • 相关阅读:
    剑指Offer
    剑指Offer
    剑指Offer
    选书
    马的遍历
    从事效应
    魔性的素数环1~20 自带解释~
    [POJ1236]Network of Schools(并查集+floyd,伪强连通分量)
    [HDOJ3974]Assign the task(建树胡搞)
    [HDOJ4027]Can you answer these queries?(线段树,特殊成段更新,成段查询)
  • 原文地址:https://www.cnblogs.com/zcr-blog/p/14891119.html
Copyright © 2020-2023  润新知