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

  • 相关阅读:
    Oracle 多版本控制
    texedo 分布式事务
    OLAP 大表和小表并行hash join
    分页SQL模板
    全表扫描分页
    索引的结构图
    利用函数索引优化<>
    分页SQL取下一页
    SORT ORDER BY STOPKEY
    压缩跟踪(CT)代码具体学习_模块1(样本的採集和扩充)
  • 原文地址:https://www.cnblogs.com/zcr-blog/p/14891119.html
Copyright © 2011-2022 走看看