zoukankan      html  css  js  c++  java
  • P3530

    啥?pigeon ycx 又回来补差分约束了?有生之年。


    Portal

    这是一个挺厉害的差分约束。

    首先建出差分约束系统。然后它要你求的是不同成绩的最大数量,而差分约束只擅长做「两个变量的差的最大 / 小值」这种问题,如何转化过去呢?

    注意到对于任意差分约束系统,这个点与点的连通性是非常混乱的,无法判断点和点和点和点之间到底能不能拉开,还是必须重叠的什么情况。我们考虑一个强连通图,这里面每个点到每个点都可以互相到达,也就是说任意两个变量的差都有有限的上下限。那就很好了呀,我们至少知道了它的不同成绩的数量的一个上限:我们总要选两个点当作值域的两端对不对,而每两个点的差都是有有限上限的,于是取那个最大的距离(也就是最大的一对点之间的最短路)就是上限了。接下来考虑上限能不能达到,很容易证明可以,因为在那条最大的最短路上,一路走的过程中每次加一,都一定是第一种限制做的功劳,而第一种限制是定量限制,限制死了的,所以一旦把值域的两端确定下来,中间都填的满满的。

    至此我们已经知道一个强连通图的求法了。考虑将原图强连通分解,然后每个 SCC 求出来答案,再缩点发现是个 DAG。DAG 也是个连通性特殊的有向图,它也好办了呀,没有任意两个 SCC 间有相互的限制,也就是说我们可以沿着边的方向将两个 SCC 之间的距离无限拉大,这样每个 SCC 就是独立的了,把所有 SCC 答案加起来也就达到了上限。

    然后考虑实现?强连通分解用 Tarjan,然后最短路的话因为 (n) 只有 (600) 可以 Floyd 三行搞定(包括判负环)(不过要开 O2)。

    code

    珍爱生命,远离抄袭!
  • 相关阅读:
    ammap demo
    sql批量新增和修改
    js右键菜单
    C# 索引器
    NUnit使用体会
    js拖动效果
    Js 原型对象与原型链(转)
    sql for xml子句
    ASP.NET应用程序生命周期
    HttpWebRequest和HttpWebResponse
  • 原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-p3530.html
Copyright © 2011-2022 走看看