动态删边SPFA: [HNOI2014]道路堵塞】的更多相关文章

[HNOI2014]道路堵塞 题目描述 $A$ 国有 $N$座城市,依次标为$1$到$N$.同时,在这$N$座城市间有$M$条单向道路,每条道路的长度是一个正整数.现在,$A$国交通部指定了一条从城市$1$到城市$N$的路径,并且保证这条路径的长度是所有从城市$1$到城市$N$的路径中最短的.不幸的是,因为从城市$1$到城市$N$旅行的人越来越多,这条由交通部指定的路径经常发生堵塞.现在$A$国想知道,这条路径中的任意一条道路无法通行时,由城市$1$到$N$的最短路径长度是多少. 输入输出格式…
[HNOI2014]道路堵塞 题意 给一个有向图并给出一个这个图的一个\(1\sim n\)最短路,求删去这条最短路上任何一条边后的最短路. 又事SPFA玄学... 有个结论,新的最短路一定是\(1\sim l,l\sim r,r\sim n\)组成的,中间一段是非最短路,两边是原最短路 先删去最短路 然后从1开始枚举短边,按顺序维护\(1\sim i\)前\(i\)个点连到\(r\sim n\)的最小值,发现我们要根据\(r\)的变换进行删除,可以拿一个堆维护. 剩下的对每个点跑跑\(SPFA…
题目链接 \(Description\) 给你一张有向图及一条\(1\)到\(n\)的最短路.对这条最短路上的每条边,求删掉这条边后\(1\)到\(n\)的最短路是多少. \(Solution\) 枚举删每条边然后求最短路显然不行.考虑怎么保留之前求最短路的一些信息. 考虑删掉一条边后的最短路,\(1\)沿最短路到了某个点\(x\),然后如果\(x\)到了最短路上的某点\(y\),之后一定是沿\(y\)到\(n\)的最短路走到\(n\). \(n\)也是最短路上的点,即\(x\)一定会到达某个\…
Description A 国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国交通部指定了一条从城市1到城市N的路径, 并且保证这条路径的长度是所有从城市1到城市N的路径中最短的.不幸的是,因为从城市1到城市N旅行的人越来越多,这条由交通部指定的路径经常发生堵塞. 现在A国想知道,这条路径中的任意一条道路无法通行时,由城市1到N的最短路径长度是多少. Input 输入文件第一行是三个用空格分开的正整数N.M和L,分别表示城市数目.单向道路数目…
题目描述 A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有从城市1到城市N的路径中最短的.不幸的是,因为从城市1到城市N旅行的人越来越多,这条由交通部指定的路径经常发生堵塞.现在A国想知道,这条路径中的任意一条道路无法通行时,由城市1到N的最短路径长度是多少. 输入输出格式 输入格式: 输入文件第一行是三个用空格分开的正整数N.M和L,分别表示城市数目.单向道路数目和交通…
http://www.lydsy.com/JudgeOnline/problem.php?id=3575 总赶脚第二题总是比第三题难...... 好吧,这题一点思路都没有 听说用民科可以过掉大部分数据...... 我们发现删边后的路径一定是这样的:起点->若干个原最短路径上的边->若干个非最短路径上的边->若干个原最短路径上的边->终点 我们发现其实就是不走原最短路径上的一个区间,并且删除的边一定在这个区间上 我们按顺序枚举边,然后从这条边的出发点开始跑SPFA,不走删掉的边(不要…
传送门 这什么题啊,乱搞就算了,不知道SPFA已经死了吗 不对那个时候好像还没死 暴力就是删掉边后跑Dijkstra SPFA 然后稍微分析一下,可以发现题目中要求的不经过最短路某条边的路径,一定是先在最短路上走,然后走不是最短路的边,然后走回在最短路上的点走完最短路,因为绕两次肯定不优 所以每次断掉一条边,就从这条边的起点更新最短路,如果走到一个在后面的最短路上的点(如果走到在前面的点,那么到终点会经过断掉的边),就可以丢到堆里,然后每次把堆里不合法的(在前面绕路的)路径删掉,取堆顶就是答案…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3575 大概的做法是,按照顺序枚举每一条要删去的边,(假设当前点为$u$,在最短路径上的下一个点是$v$)然后强制不走${u->v}$这条边,将$u$入队,做一遍以$1$号点为原点的SPFA(这个SPFA的dis值是要保留的,因为具有单调性同时也保证了复杂度),如果可以更新到一个最短路径上的点$x$,显然就说明在最短路径$u->x$的所有边被断去之后都可以由这条路径到达汇点,用一个堆维护…
http://www.lydsy.com/JudgeOnline/problem.php?id=3575 (题目链接) 题意 给出一个有向图和一条最短路,问最短路上任意一条边断掉,此时的最短路是多少. Solution 听说这道题正解被江哥插了...右转题解→_→:lmy学长 平衡树用堆就可以了. 细节 用栈来存要加入堆中的点,不然不好消除标记. 代码 // bzoj3575 #include<algorithm> #include<iostream> #include<cs…
题目描述 给你一张\(N\)个点.\(M\)条边的有向图,按顺序给定你一条有\(L\)条边的\(1\rightarrow n\)的最短路, 每次断掉这\(L\)条边中的一条(不对后面答案产生影响),求每次断边之后的最短路. 题解 40pts 每次断边之后跑\(dijkstra\)最短路即可,复杂度\(O(LM\log N)\). 100pts 法一: 好像是一种奇怪的堆+\(spfa\)算法,但是在现在这种卡\(spfa\)的大环境下,这种方法已经不对了. 法二: 分别建正图和反图跑dijkst…