zoukankan      html  css  js  c++  java
  • CF1580E Railway Construction

    CF1580E Railway Construction

    铁路系统中有 (n) 个车站和 (m) 条双向边,有边权,无重边。这些双向边使得任意两个车站互相可达。

    你现在要加一些单向边 ((u,v,w))(w) 随便定,代价是 (a_u) ,使得从 (1) 号车站出发到每个车站都有至少两条边不相交的路线,并且最短路不改变。

    由于不可控因素,(a) 序列会受到 (q) 次修改,每次让 (a_u leftarrow a_u+x) ,并求当前的最小代价。

    (1le n,m,q le 3cdot 10^5,1le a_ile 10^9, 1le xle 4cdot 10^8)

    Solution

    首先从 (1) 出发跑最短路,显然非最短路边是无用的。因此建出最短路图,我们在 DAG 上讨论问题。

    可以发现,将所有点按照 ( ext{dis}) 排序是合法的拓扑序,而只要有一个点入度 (ge 2) ,那么它已经满足要求了。

    所以,问题转化为将所有入度 (=1) 的点新连一条边,那么肯定挑拓扑序在它之前的 (a) 最小的点。

    因此在拓扑序上维护前缀 (a) 最小值和次小值的点即可,暴力复杂度 (mathcal O(nq))

    考虑优化,我们将所有改变前缀最小/次小的位置丢进一个 set 里,显然二元组 (最小值,次小值) 构成一个个区间。倒着处理询问(即每次 (a_u) 变小):

    • (u) 是这个区间的最小值

      可以发现它对区间不会造成任何影响,只对答案产生了影响;求对答案影响的部分,可以用一棵线段树去维护;

    • (u) 是这个区间的次小值

      注意到不同区间的次小值一定不一样(这个显然),因此只有撑死 (1) 个区间符合该条件,暴力修改即可;

    • (u) 既不是这个区间的最小值,也不是次小值

      类比颜色段均摊的思想,它修改的区间端点会从 set 里 erase 掉,同时把它加进 set 里,而 set 里的端点个数总计是 (mathcal O(n+q)) 的,因此直接暴力做即可。

    总时间复杂度 (mathcal O(mlog m+(n+q)log n))

  • 相关阅读:
    vba --barcode9.0 生成 code39
    利用JS 阻止表单提交
    VS2012变化的快捷键
    鼠标右击禁用
    计算机算法常用术语中英对照
    GrideView(三)---编辑功能实现
    GrideView(二)---删除功能
    GridView认识(一)
    微软 自带 AJAX 拓展
    C#日期函数使用大全
  • 原文地址:https://www.cnblogs.com/wlzhouzhuan/p/15359277.html
Copyright © 2011-2022 走看看