洛谷 [HNOI2014]道路堵塞 解题报告
[HNOI2014]道路堵塞
题意
给一个有向图并给出一个这个图的一个\(1\sim n\)最短路,求删去这条最短路上任何一条边后的最短路。
又事SPFA玄学...
有个结论,新的最短路一定是\(1\sim l,l\sim r,r\sim n\)组成的,中间一段是非最短路,两边是原最短路
先删去最短路
然后从1开始枚举短边,按顺序维护\(1\sim i\)前\(i\)个点连到\(r\sim n\)的最小值,发现我们要根据\(r\)的变换进行删除,可以拿一个堆维护。
剩下的对每个点跑跑\(SPFA\)就可以了,每次注意删去不参与松弛的那条边。
感性上是只跑了一次\(SPFA\)的
Code:
#include <cstdio>
#include <cstring>
#include <queue>
#include <cctype>
int read()
{
int x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
const int N=2e5+10;
int head[N],to[N],Next[N],edge[N],cnt;
void add(int u,int v,int w)
{
to[++cnt]=v,edge[cnt]=w,Next[cnt]=head[u],head[u]=cnt;
}
struct node{int u,v,w;}E[N];
int n,m,L,used[N],dis[N],disl[N],disr[N],num[N],ban[N],path[N],s[N],vis[N],tot;
struct yuucute
{
int v,w;
bool friend operator <(yuucute a,yuucute b){return a.w>b.w;}
}yuu[N];
std::priority_queue <yuucute> Q;
void spfa(int ss,int ban,int tim)
{
dis[ss]=disl[ss];
std::queue <int> q;
q.push(ss);
tot=0;
while(!q.empty())
{
int now=q.front();
q.pop();
used[now]=0;
for(int v,i=head[now];i;i=Next[i])
if(((v=to[i])!=ban||now!=ss)&&dis[v]>dis[now]+edge[i])
{
dis[v]=dis[now]+edge[i];
if(num[v]>tim){if(vis[v]!=tim) vis[s[++tot]=v]=tim;}
else if(!used[v]) {q.push(v);used[v]=1;}
}
}
while(tot)
{
int now=s[tot--];
if(!yuu[now].v||yuu[now].w>dis[now]+disr[now])
{
yuu[now].w=dis[now]+disr[now];
yuu[now].v=now;
Q.push(yuu[now]);
}
}
}
int main()
{
n=read(),m=read(),L=read();
for(int i=1;i<=m;i++) E[i].u=read(),E[i].v=read(),E[i].w=read();
for(int i=1;i<=L;i++)
{
ban[path[i]=read()]=1;
num[E[path[i]].u]=i;
disl[E[path[i]].v]=disl[E[path[i]].u]+E[path[i]].w;
}
num[n]=L+1;
for(int i=L;i;i--) disr[E[path[i]].u]=disr[E[path[i]].v]+E[path[i]].w;
for(int i=1;i<=m;i++) if(!ban[i]) add(E[i].u,E[i].v,E[i].w);
memset(dis,0x3f,sizeof dis);
for(int i=1;i<=L;i++)
{
spfa(E[path[i]].u,E[path[i]].v,i);
while(!Q.empty()&&num[Q.top().v]<=i) Q.pop();
if(Q.empty()) puts("-1");
else printf("%d\n",Q.top().w);
}
return 0;
}
2019.2.18
洛谷 [HNOI2014]道路堵塞 解题报告的更多相关文章
- 洛谷 P1070 道路游戏 解题报告
P1070 道路游戏 题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有\(n\)个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- 洛谷 P3313 [SDOI2014]旅行 解题报告
P3313 [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教 ...
- 洛谷 P3629 [APIO2010]巡逻 解题报告
P3629 [APIO2010]巡逻 题目描述 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通 ...
- 洛谷 P1850 换教室 解题报告
P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1≤i≤n) ...
- 洛谷 P1363 幻想迷宫 解题报告
P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:mo ...
- 洛谷 P3349 [ZJOI2016]小星星 解题报告
P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...
随机推荐
- 深入理解 JS 引擎执行机制(同步执行、异步执行以及同步中的异步执行)
首先明确两点: 1.JS 执行机制是单线程. 2.JS的Event loop是JS的执行机制,深入了解Event loop,就等于深入了解JS引擎的执行. 单线程执行带来什么问题? 在JS执行中都是单 ...
- NOI Day2线上同步赛崩盘记
Preface 蒟蒻愉快的NOI线上赛Day2之行,不过因为太菜就凉了 这次由于策略&&网络的问题,最后两题都没有交,结果就靠T1稳住拿了75分就回家了. 我真是太菜了. 屠龙勇士 首 ...
- Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)
知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...
- CF 910 C. Minimum Sum
链接 [http://codeforces.com/group/1EzrFFyOc0/contest/910/problem/C] 题意 给你n个字符串,每个字符串的字符是a~j,每个字符都可以是0~ ...
- easyUI中numberbox的校验
例:两个numberbox(A,B),其中两个都为必填项,要求在文本框显示红色,来显示其是必填项,其中只有当A填完之后,在能允许B进行填写,否则给出提示框,并清空其中的数据 <!DOCTYPE ...
- Linux内核分析第五周总结
系统调用在内核代码中的工作机制和初始化 xyz()与sys_xyz()是通过系统调用号联系在一起的 0x80与system_call是通过中断向量联系起来的 系统调用机制的初始化 用汇编代码编写系统调 ...
- 小学四则运算APP 第二次冲刺-第二天
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第二次冲刺阶段时间:11.29~12.09 本次发布的判断题功能界面的设置: activity_panduan_set.xml: < ...
- docker+redis 持久化配置(AOF)
RDB持久化与AOF持久化简单描述 RDB:RDB使用快照的方式存储数据库中的内容,直接将所有键值对数据全部存入二进制文件.建议使用BGSAVE来进行备份,整个过程会新fork一个子进程来执行,不影响 ...
- the confilict between validation and readonly in jquery
How can I disable jquery validation on readonly fields? http://stackoverflow.com/questions/10803294/ ...
- js选择排序。
<script> , , , , , , , ]; ; j<len; j++ ){ // 假设min为最小值 var minIndex = j; var min = arr[j]; ...