CF1580E Railway Construction
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的更多相关文章
- Construction of Primitives in Open Cascade
Construction of Primitives in Open Cascade eryar@163.com 一.创建基本图元 Making Primitives 将用到如下的类创建基本图元,包括 ...
- 数据结构 - Codeforces Round #353 (Div. 2) D. Tree Construction
Tree Construction Problem's Link ------------------------------------------------------------------- ...
- BZOJ 2080: [Poi2010]Railway 双栈排序
2080: [Poi2010]Railway Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 140 Solved: 35[Submit][Statu ...
- UVa 10720 - Graph Construction(Havel-Hakimi定理)
题目链接: 传送门 Graph Construction Time Limit: 3000MS Memory Limit: 65536K Description Graph is a coll ...
- Codeforces 335C Sorting Railway Cars
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- UVa1515 Pool construction(最小割)
题目 Source https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- CF#335 Sorting Railway Cars
Sorting Railway Cars time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- 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 ...
- STL---Codeforces675D Tree Construction(二叉树节点的父亲节点)
Description During the programming classes Vasya was assigned a difficult problem. However, he doesn ...
随机推荐
- Codepen 每日精选(2018-4-11)
按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以打开原始页面. 纯 css 写行走的大象https://codepen.io/FabioG/ful... 纯 css 画的 ...
- 前端面试题整理——VUE相关题目与回答
1.v-if与v-show的区别? v-if的原理是根据判断条件来动态的进行增删DOM元素, v-show是根据判断条件来动态的进行显示和隐藏元素,频繁的进行增删DOM操作会影响页面加载速度和性能所以 ...
- vue日历(纯 js,没用任何插件和组件)
效果图: 代码: <template> <div class="calender"> <div class="top"> ...
- 痞子衡嵌入式:大话双核i.MXRT1170之单独在线调试从核工程的方法(IAR篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170下单独在线调试从核工程的方法(基于IAR). 两年前痞子衡写过一篇<双核i.MXRT1170之Cortex-M ...
- 3.Docker容器学习之新手基础使用
原文地址: http://blog.weiyigeek.top/2019/5/2-docker%E5%AD%A6%E4%B9%A0%E4%B9%8B%E5%9F%BA%E7%A1%80%E4%BD%B ...
- 新手入门C语言第八章:C循环
一.C 循环 有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推.编程语言提供了更为复杂执行路径的多种控制结构.循环语句允许 ...
- pgpool-II 4.3 中文手册 - 入门教程
本章解释了如何开始使用 Pgpool-II. 安装 在本节中,我们假设您已经安装了 Pgpool-II 与 PostgreSQL 集群. 你的第一个复制(Replication) 在本节中,我们将解释 ...
- Spring从入门到源码—IOC基本使用(二)
1.spring_helloworld 使用maven的方式来构建项目(Mavaen) 添加对应的pom依赖 pom.xml <dependencies> <!-- https:// ...
- CA周记 - 带你进⼊ OpenAI 的世界
2021年11月的 Microsoft Ignite , 微软带来了全新的 Azure OpenAI Service,通过新的 Azure 认知服务能够访问 OpenAI 强大的 GPT-3 模型 . ...
- python学习-Day38-HTTP
目录 HTTP简介 可以充当客户端的有哪些 HTTP 工作原理 HTTP协议 HTTP协议四大特性 数据格式 请求格式: 响应格式: HTTP 请求方法 HTTP 状态码分类 响应分为五类: HTTP ...