CF1580E Railway Construction

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

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

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

\(1\le n,m,q \le 3\cdot 10^5,1\le a_i\le 10^9, 1\le x\le 4\cdot 10^8\) 。

Solution

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

可以发现,将所有点按照 \(\text{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(m\log m+(n+q)\log n)\) 。

CF1580E Railway Construction的更多相关文章

  1. Construction of Primitives in Open Cascade

    Construction of Primitives in Open Cascade eryar@163.com 一.创建基本图元 Making Primitives 将用到如下的类创建基本图元,包括 ...

  2. 数据结构 - Codeforces Round #353 (Div. 2) D. Tree Construction

    Tree Construction Problem's Link ------------------------------------------------------------------- ...

  3. BZOJ 2080: [Poi2010]Railway 双栈排序

    2080: [Poi2010]Railway Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 140  Solved: 35[Submit][Statu ...

  4. UVa 10720 - Graph Construction(Havel-Hakimi定理)

    题目链接: 传送门 Graph Construction Time Limit: 3000MS     Memory Limit: 65536K Description Graph is a coll ...

  5. Codeforces 335C Sorting Railway Cars

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  6. UVa1515 Pool construction(最小割)

    题目 Source https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  7. CF#335 Sorting Railway Cars

    Sorting Railway Cars time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. construction of tuples containing 0 or 1 items

    [construction of tuples containing 0 or 1 items] the syntax has some extra quirks to accommodate the ...

  9. STL---Codeforces675D Tree Construction(二叉树节点的父亲节点)

    Description During the programming classes Vasya was assigned a difficult problem. However, he doesn ...

随机推荐

  1. C语言类型(上)

    前提说明 格式说明:以[signed] int 为例 表明该类型的完整表达是 signed int 只不过signed可以省略 所以 int 也代表 signed int 类型 signed和unsi ...

  2. MongoDB 集群-主从复制(一主二从)

    MongoDB 集群-主从复制(一主二从) 官方文档 https://docs.mongodb.com/manual/tutorial/deploy-replica-set/ https://docs ...

  3. ajax - xhr level2新特性 json等众多内容

    1. 今天的内容其实挺多的,我们慢慢来说.首先第一个是xhr的基本使用,什么是xhr? XMLHTTPRequest是浏览器提供的js对象,可以请求服务器上的数据资源,包括我们前面一直用的jq里面的三 ...

  4. Python Pandas库 初步使用

    用pandas+numpy读取UCI iris数据集中鸢尾花的萼片.花瓣长度数据,进行数据清理,去重,排序,并求出和.累积和.均值.标准差.方差.最大值.最小值

  5. HCIE笔记-第八节-传输层协议

    传输层:实现"端到端"的服务 应用到应用 端口 = port [逻辑端口] 基于应用级别的互访,就是 端口到端口的互访. 传输层 = 0-65535[端口范围] === TCP/U ...

  6. Java语言学习day34--8月09日

    ##13Math类的方法_1 A:Math类中的方法 /* * static double sqrt(double d) * 返回参数的平方根 */ public static void functi ...

  7. 【面试普通人VS高手系列】ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?

    之前分享过一期HashMap的面试题,然后有个小伙伴私信我说,他遇到了一个ConcurrentHashMap的问题不知道怎么回答. 于是,就有了这一期的内容!! 我是Mic,一个工作了14年的Java ...

  8. 双列集合Map接口 & Collections工具类

    HashMap 常用方法 遍历方式 iterator迭代器  ITIT HashTable 继承字典 Hashtable--Properties 文件读写 总结 Collections工具类

  9. 2003031121-浦娟-python数据分析第四周作业-第二次作业

    项目 内容 课程班级博客链接 20级数据班(本) 作业链接 Python第四周作业第二次作业 博客名称 2003031121-浦娟-python数据分析第四周作业-matolotlib的应用 要求 每 ...

  10. 图文详解:小白也能看懂的 Kubernetes

    Kubernetes 这个单词来自于希腊语,含义是舵手或领航员 .其词根是 governor 和 cybernetic.K8s 是它的缩写,用 8 字替代了"ubernete". ...