【BZOJ】3575: [Hnoi2014]道路堵塞
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3575
大概的做法是,按照顺序枚举每一条要删去的边,(假设当前点为$u$,在最短路径上的下一个点是$v$)然后强制不走${u->v}$这条边,将$u$入队,做一遍以$1$号点为原点的SPFA(这个SPFA的dis值是要保留的,因为具有单调性同时也保证了复杂度),如果可以更新到一个最短路径上的点$x$,显然就说明在最短路径$u->x$的所有边被断去之后都可以由这条路径到达汇点,用一个堆维护最小值即可。
注意:SPFA时最短路径上的点不能入队。因为某一条边不走的最短路相当于$1$--沿最短路-->$p1$-->……-->$p2$--沿最短路-->$n$
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstdlib> 6 #include<cmath> 7 #include<queue> 8 #include<map> 9 #include<cstring> 10 using namespace std; 11 #define maxn 1001000 12 #define inf 0x7fffffff 13 #define SIZE 1000000 14 #define llg int 15 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); 16 llg n,m,posn,pos[maxn],dis[maxn],dl[maxn],head,tail,l,sp[maxn],bj[maxn],U,V,Z,dis_T[maxn]; 17 vector<llg>a[maxn],val[maxn]; 18 19 struct Edge{llg x,y,z;}e[maxn]; 20 21 struct node 22 { 23 llg pos,val,wz; 24 bool operator<(const node&a)const{ 25 return a.val<val; 26 } 27 }; 28 29 priority_queue<node>q; 30 31 void init() 32 { 33 cin>>n>>m>>l; 34 llg x,y,z; 35 for (llg i=1;i<=m;i++) 36 { 37 scanf("%d%d%d",&x,&y,&z); 38 a[x].push_back(y),val[x].push_back(z); 39 e[i].x=x; e[i].y=y; e[i].z=z; 40 } 41 for (llg i=2;i<=n;i++) dis[i]=inf; 42 for (llg i=1;i<=l;i++) 43 { 44 scanf("%d",&sp[i]); 45 pos[e[sp[i]].x]=++posn; 46 } 47 for (llg i=l;i>=1;i--) dis_T[e[sp[i]].x]=dis_T[e[sp[i]].y]+e[sp[i]].z; 48 pos[n]=++posn; 49 } 50 51 void spfa(llg x) 52 { 53 llg v,w,st=x; 54 dl[1]=x; head=0; tail=1; 55 do 56 { 57 head%=SIZE; 58 x=dl[++head]; bj[x]=0; 59 w=a[x].size(); 60 for (llg i=0;i<w;i++) 61 { 62 v=a[x][i]; 63 if (v==V && x==U && Z==val[x][i]) continue; 64 if (dis[v]<dis[x]+val[x][i]) continue; 65 dis[v]=dis[x]+val[x][i]; 66 if (!bj[v] && !pos[v]) 67 { 68 bj[v]=1; 69 tail%=SIZE; dl[++tail]=v; 70 } 71 if (pos[v]) 72 { 73 if (pos[v]<=pos[st]) continue; 74 node r; 75 r.val=dis[v]+dis_T[v]; r.pos=pos[v]; r.wz=v; 76 q.push(r); 77 } 78 } 79 }while (head!=tail); 80 } 81 82 int main() 83 { 84 yyj("road"); 85 init(); 86 for (llg i=1;i<=l;i++) 87 { 88 U=e[sp[i]].x,V=e[sp[i]].y,Z=e[sp[i]].z; 89 if (i!=1) dis[e[sp[i]].x]=dis[e[sp[i-1]].x]+e[sp[i-1]].z; 90 spfa(e[sp[i]].x); 91 while (!q.empty()) 92 { 93 if (q.top().pos<=pos[e[sp[i]].x]) q.pop();else break; 94 } 95 if (q.empty()) puts("-1");else printf("%d\n",q.top().val); 96 } 97 return 0; 98 }
转载于:https://www.cnblogs.com/Dragon-Light/p/6430742.html
【BZOJ】3575: [Hnoi2014]道路堵塞相关推荐
- BZOJ.3575.[HNOI2014]道路堵塞(最短路 动态SPFA)
题目链接 \(Description\) 给你一张有向图及一条\(1\)到\(n\)的最短路.对这条最短路上的每条边,求删掉这条边后\(1\)到\(n\)的最短路是多少. \(Solution\) 枚 ...
- 【bzoj3575】 Hnoi2014—道路堵塞
http://www.lydsy.com/JudgeOnline/problem.php?id=3575 (题目链接) 题意 给出一个有向图和一条最短路,问最短路上任意一条边断掉,此时的最短路是多少. ...
- [HNOI 2014]道路堵塞
Description A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国 交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有 ...
- 虚树(bzoj 3572: [Hnoi2014]世界树)
例题: 一棵n个节点的树,m次查询,每次查询给你一个点集U,对于树上的所有节点x(x∉U),你要找到一个点y(y∈U)满足y点离x点最近且标号最小,表示x点受y点管辖,而你的任务就是对于每次查询输出U ...
- bzoj 2435: [Noi2011]道路修建 树上 dp
2435: [Noi2011]道路修建 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- BZOJ 3571: [Hnoi2014]画框
3571: [Hnoi2014]画框 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 996 Solved: 561 [Submit][Status ...
- bzoj 2435: [Noi2011]道路修建(DFS)
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 4110 Solved: 1429 [Submit][Sta ...
- BZOJ 3573 [HNOI2014]米特运输
题目链接:传送门 冗长冗长的题面: 3573:[HNOI2014]米特运输3573: [HNOI2014]米特运输3573:[HNOI2014]米特运输 Description 米特是D星球上一种非常 ...
- bzoj 3572: [Hnoi2014]世界树
Description 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息.持 ...
最新文章
- ECS应用管理最佳实践
- 如何在linux下安装mysql5.7?
- Java背景颜色怎么设成随机的_JS实现随机改变背景颜色
- spark mllib源码分析之随机森林(Random Forest)
- python写自动化工具_微软最强 Python 自动化工具开源了!不用写一行代码!
- maccmsv10 苹果cms 深度定制站群版
- axios, ajax和fetch的比较
- UVA11876 N + NOD (N)【欧拉筛法+前缀和】
- 唐雄燕点评NFV产业进程:2016年将迎来试点年
- java 字符串 数字个数_JAVA 统计字符串中中文,英文,数字,空格的个数
- WAN killer
- 基于itext的pdf拼接
- 数值计算之第二期:误差分析
- 【Unity】游戏开发过程中的前后台切换技术
- fx5800p编程教程_fx5800P编程计算器操作方法.pdf
- 【网络安全】前端程序员务必掌握的图片防盗链
- requests+正则表达式爬取猫眼电影TOP100!
- 封装一个简单实用的朋友圈
- 云服务器htdocs文件夹在,htdocs文件夹
- 4510. 寻宝!大冒险!
热门文章
- 复制选中的listbox内容
- 操作系统下查看HBA卡信息wwn的方法
- [CareerCup] 9.6 Generate Parentheses 生成括号
- [LaunchPad] 超声波测试,数码管显示
- python每隔30s检查一次_用Python写一个“离线语音提示器”来提醒我们别忘记了时间...
- Mat的初始化以及Mat与数组的相互转化
- 分享一个引起极度舒适的工作桌面
- 订单生产计划表范本_工厂生产管理为什么需要ERP软件?
- 帝国cms录入表单模板php,帝国cms7.5在线表单提交制作教程
- Gitlab添加SSH密钥的解决办法