http://www.lydsy.com/JudgeOnline/problem.php?id=3575 (题目链接)

题意

  给出一个有向图和一条最短路,问最短路上任意一条边断掉,此时的最短路是多少。

Solution

  听说这道题正解被江哥插了。。。右转题解→_→:lmy学长

  平衡树用堆就可以了。

细节

  用栈来存要加入堆中的点,不然不好消除标记。

代码

// bzoj3575
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf (1ll<<60)
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=200010;
int head[maxn],dis[maxn],vis[maxn],st[maxn],in[maxn];
int n,m,L,cnt,id[maxn],ord[maxn],suf[maxn];
struct edge {int from,to,next,w;}e[maxn<<1];
struct data {
int num,len;
friend bool operator < (const data a,const data b) {
return a.len>b.len;
}
};
priority_queue<data> T; inline void link(int u,int v,int w) {
e[++cnt]=(edge){u,v,head[u],w};head[u]=cnt;
}
inline void SPFA(int u,int v,int k) {
queue<int> q;q.push(u);
int top=0;
while (!q.empty()) {
int x=q.front();q.pop();
vis[x]=0;
for (int i=head[x];i;i=e[i].next) if (i!=k) {
if (ord[e[i].to]>ord[u]) {
dis[e[i].to]=min(dis[e[i].to],dis[x]+e[i].w);
if (!in[e[i].to]) in[e[i].to]=1,st[++top]=e[i].to;
}
else if (dis[e[i].to]>dis[x]+e[i].w) {
dis[e[i].to]=dis[x]+e[i].w;
if (!vis[e[i].to]) vis[e[i].to]=1,q.push(e[i].to);
}
}
}
for (int i=1;i<=top;i++) {
T.push((data){ord[st[i]],suf[st[i]]+dis[st[i]]});
in[st[i]]=0;
}
}
int main() {
scanf("%d%d%d",&n,&m,&L);
for (int u,v,w,i=1;i<=m;i++) {
scanf("%d%d%d",&u,&v,&w);
link(u,v,w);
}
ord[1]=1;
for (int i=1;i<=L;i++) scanf("%d",&id[i]),ord[e[id[i]].to]=i+1;
for (int i=L;i>=1;i--) suf[e[id[i]].from]=suf[e[id[i]].to]+e[id[i]].w;
memset(dis,0x7f,sizeof(dis));dis[1]=0;
for (int i=1;i<=L;i++) {
int u=e[id[i]].from,v=e[id[i]].to;
SPFA(u,v,id[i]);
while (!T.empty() && T.top().num<ord[v]) T.pop();
printf("%d\n",T.empty() ? -1 : T.top().len);
dis[v]=dis[u]+e[id[i]].w;
}
return 0;
}

【bzoj3575】 Hnoi2014—道路堵塞的更多相关文章

  1. bzoj3575[Hnoi2014]道路堵塞

    http://www.lydsy.com/JudgeOnline/problem.php?id=3575 总赶脚第二题总是比第三题难...... 好吧,这题一点思路都没有 听说用民科可以过掉大部分数据 ...

  2. BZOJ3575 HNOI2014 道路阻塞

    3575: [Hnoi2014]道路堵塞 Time Limit: 10 Sec  Memory Limit: 128 MB Description A国有N座城市,依次标为1到N.同时,在这N座城市间 ...

  3. 洛谷 [HNOI2014]道路堵塞 解题报告

    [HNOI2014]道路堵塞 题意 给一个有向图并给出一个这个图的一个\(1\sim n\)最短路,求删去这条最短路上任何一条边后的最短路. 又事SPFA玄学... 有个结论,新的最短路一定是\(1\ ...

  4. 动态删边SPFA: [HNOI2014]道路堵塞

    [HNOI2014]道路堵塞 题目描述 $A$ 国有 $N$座城市,依次标为$1$到$N$.同时,在这$N$座城市间有$M$条单向道路,每条道路的长度是一个正整数.现在,$A$国交通部指定了一条从城市 ...

  5. bzoj 3575: [Hnoi2014]道路堵塞

    Description A 国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国交通部指定了一条从城市1到城市N的路径, 并且保证这条路径的长度是所 ...

  6. [HNOI2014]道路堵塞

    题目描述 A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有从城市1到城市N ...

  7. luogu P3238 [HNOI2014]道路堵塞

    传送门 这什么题啊,乱搞就算了,不知道SPFA已经死了吗 不对那个时候好像还没死 暴力就是删掉边后跑Dijkstra SPFA 然后稍微分析一下,可以发现题目中要求的不经过最短路某条边的路径,一定是先 ...

  8. BZOJ.3575.[HNOI2014]道路堵塞(最短路 动态SPFA)

    题目链接 \(Description\) 给你一张有向图及一条\(1\)到\(n\)的最短路.对这条最短路上的每条边,求删掉这条边后\(1\)到\(n\)的最短路是多少. \(Solution\) 枚 ...

  9. 【BZOJ】3575: [Hnoi2014]道路堵塞

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3575 大概的做法是,按照顺序枚举每一条要删去的边,(假设当前点为$u$,在最短路径上的下一 ...

随机推荐

  1. 【Unity Shader】Shader基础

    目录 Chapter3 Unity Shader 基础 Chapter3 Unity Shader 基础 概述 在Unity需要材质(Material)与Unity Shader配合使用来达到满意的效 ...

  2. java.io.tmpdir指定的路径在哪?

    Java.io.tmpdir介绍 System.getproperty(“java.io.tmpdir”)是获取操作系统缓存的临时目录,不同操作系统的缓存临时目录不一样, 在Windows的缓存目录为 ...

  3. Python更新库

    查看系统里过期的python库,可以用pip命令 [root@vnode33 sim-enb-sgi]# pip list #列出所有安装的库 Package Version ------------ ...

  4. Navicat将oracle中数据复制到mysql

    1,首先两个数据库都要处于连接状态 2,工具 -- 数据传输 3,选择来源数据库以及要传输的表和目标数据库 4,点击开始 PS:遇到一个问题:[Err] [Dtf] 1426 - Too-big pr ...

  5. SQL语句联表查询

    Natural join:字段名和数据类型相同字段进行等值连接: inner join:与join相同,把符合条件的元组选出来,创建视图时用的即是inner join: left join:左表全选出 ...

  6. sampleFactory(女娲造人)

    使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象. package c ...

  7. Firefox插件开发学习总结

    2018.06.14 我们小组最初只准备开发运行在google上的知乎插件,但我们经过调研发现还有一大部分用户是使用的火狐浏览器,所以我们也准备制作火狐插件.以下是我学习了部分火狐插件制作知识后的总结 ...

  8. UDP与TCP笔记

    1.UDP UDP协议在工作时是建立在IP协议之上的,UDP从进程的缓冲区接收进程每一次产生的输出,对每次输出都生成一个UDP数据报,然后把生成的UDP数据报直接封装在IP数据报中进行传输,因此在传输 ...

  9. 深入理解JAVA I/O系列二:字节流详解

    流的概念 JAVA程序通过流来完成输入/输出.流是生产或消费信息的抽象,流通过JAVA的输入输出与物理设备链接,尽管与它们链接的物理设备不尽相同,所有流的行为具有相同的方式.这样就意味一个输入流能够抽 ...

  10. 全选练习-原生版和jQuery

    今天来做一些练习,做全选练习 原生版的实现: <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...