#图# #SPFA# ----- codevs1021 玛丽卡
codevs1021 玛丽卡
题目描述 Description
麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复。因为她和他们不住在同一个城市,因此她开始
准备她的长途旅行。在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另
一个城市路上所需花费的时间。麦克在车中无意中听到有一条路正在维修,并且那儿正堵车,但没听清
楚到底是哪一条路。无论哪一条路正在维修,从玛丽卡所在的城市都能到达麦克所在的城市。玛丽卡将
只从不堵车的路上通过,并且她将按最短路线行车。麦克希望知道在最糟糕的情况下玛丽卡到达他所在
的城市需要多长时间,这样他就能保证他的女朋友离开该城市足够远。编写程序,帮助麦克找出玛丽卡
按最短路线通过不堵车道路到达他所在城市所需的最长时间(用分钟表示)。
输入描述 Input Description
第一行有两个用空格隔开的数N和M,分别表示城市的数量以及城市间道路的数量。
1≤N≤1000,1≤M≤N*(N-1)/2。城市用数字1至N标识,麦克在城市1中,玛丽卡在城市N中。
接下来的M行中每行包含三个用空格隔开的数A,B和V。其中1≤A,B≤N,1≤V≤1000。
这些数字表示在A和城市B中间有一条双行道,并且在V分钟内是就能通过。
输出描述 Output Description
输出文件的第一行中写出用分钟表示的最长时间,在这段时间中,无论哪条路在堵车,玛丽卡应该能够
到达麦克处,如果少于这个时间的话,则必定存在一条路,该条路一旦堵车,玛丽卡就不能够赶到麦克
处。
样例输入 Sample Input
5 7
1 2 8
1 4 10
2 3 9
2 4 10
2 5 1
3 4 7
3 5 10
样例输出 Sample Output
27
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- int n,m;
- int cnt,start,end,ans;
- int head[],q[],dis[],p[];
- bool vis[];
- struct node{
- int u;
- int v;
- int w;
- int next;
- }s[];
- void add(int x,int y,int z){//建边
- s[++cnt].u=x;
- s[cnt].v=y;
- s[cnt].w=z;
- s[cnt].next=head[y];
- head[y]=cnt;
- }
- int main(){
- scanf("%d%d",&n,&m);
- for(int i=;i<=m;i++){
- int x,y,z;
- scanf("%d%d%d",&x,&y,&z);
- add(x,y,z);
- add(y,x,z);//无向图双向建边
- }
- dis[]=;//1--1 dis=0
- vis[]=true;
- for(int i=;i<=n;i++) dis[i]=;
- q[++start]=;//1进队
- end++;
- while(start<=end){//spfa
- for(int i=head[q[start]];i!=;i=s[i].next){
- if(dis[q[start]]+s[i].w<dis[s[i].u]){//松弛
- dis[s[i].u]=dis[q[start]]+s[i].w;
- p[s[i].u]=i;//记录路径
- if(vis[s[i].u]==false){//判断是否进队
- q[++end]=s[i].u;
- vis[s[i].u]=true;
- }
- }
- }
- vis[q[start++]]=false;//队首弹出
- }
- ans=max(ans,dis[n]);//不删边的情况下最优解
- int t=n,k;
- while(t!=){//枚举删除最优路径上那一条边
- k=s[p[t]].w;//删边记录删除路径 val
- s[p[t]].w=;//相当于删除
- if(p[t]&)s[p[t]+].w=;//双向建 双向删
- else s[p[t]-].w=;
- for(int i=;i<=n;i++){
- dis[i]=;
- vis[i]=false;
- }
- for(int i=;i<=end;i++)q[i]=;
- dis[]=;
- vis[]=true;
- start=;
- end=;
- q[start]=;
- while(start<=end){//删一边 spfa
- for(int i=head[q[start]];i!=;i=s[i].next){
- if(dis[q[start]]+s[i].w<dis[s[i].u]){
- dis[s[i].u]=dis[q[start]]+s[i].w;
- if(vis[s[i].u]==false){
- q[++end]=s[i].u;
- vis[s[i].u]=true;
- }
- }
- }
- vis[q[start++]]=false;
- }
- if(dis[n]!=)ans=max(ans,dis[n]);
- s[p[t]].w=k;//复原
- if(p[t]&)s[p[t]+].w=k;
- else s[p[t]-].w=k;
- t=s[p[t]].v;
- }
- printf("%d",ans);
- return ;
- }
#图# #SPFA# ----- codevs1021 玛丽卡的更多相关文章
- codevs1021 玛丽卡
题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...
- codevs 1021 玛丽卡(spfa)
题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...
- 洛谷P1186 玛丽卡 spfa+删边
洛谷P1186 玛丽卡http://blog.csdn.net/huihao123456/article/details/73414139题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. ...
- Spfa【p1186】 玛丽卡
Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个 ...
- 习题:玛丽卡(SPFA)
玛丽卡(wikioi1021) [题目描述 ]麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复.因为她和他们不住在同一个城市,因此她开始准备她的长途旅行.在这个国家中每两个城市之间最多只有一条路相通, ...
- P1186 玛丽卡
题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...
- 洛谷——P1186 玛丽卡
P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...
- luoguP1186 玛丽卡 x
P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...
- Codevs 1021 (玛丽卡)
题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...
随机推荐
- Codeforces Round #368 (Div. 2)D. Persistent Bookcase DFS
题目链接:http://codeforces.com/contest/707/my 看了这位大神的详细分析,一下子明白了.链接:http://blog.csdn.net/queuelovestack/ ...
- 翻译的很好的一篇android mediaplayer
MediaPlayer类可用于控制音频/视频文件或流的播放.关于如何使用这个类的方法还可以阅读VideoView类的文档. 1.状态图对播放音频/视频文件和流的控制是通过一个状态机来管理的.下图显示一 ...
- Lua打印Table的数据结构工具类
--这是quick中的工具,作用就是打印Lua中强大的table的结构, 当table的嵌套层级比较多的时候,这个工具非常方便,开发中必备的工具. --具体使用方法:local debug = req ...
- highcharts第一篇---简介和使用
Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...
- Struts2---声明式异常处理
在service方法里 throw抛出一个异常, 然后再方法声明上加上throws: public List<Category> list() throws SQLException{ C ...
- ARM架构解析
ARM架构解析 (2014-11-23 21:56:53) 转载▼ 标签: francis_hao arm架构 arm核 soc 分类: MCU 先来谈一下ARM的发展史:1978年12月5日,物理学 ...
- ngx_http_core_module模块提供的变量
ngx_http_core_module模块在处理请求时,会有大量的变量,这些变量可以通过访问日志来记录下来,也可以用于其它nginx模块.在我们对请求做策略如改写等等都会使用到一些变量,顺便对ngx ...
- (简单) POJ 1062 昂贵的聘礼,Dijkstra。
Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家 拿不出这么多金币,便请求酋长降 ...
- stm32 Bootloader设计(YModem协议) (转)
源:stm32 Bootloader设计(YModem协议) 相信很多人都希望,不开盖就可以对固件进行升级吧,就像手机那些.下文中的bootload就来实现这样的功能. 前段时间有项目关于Bootlo ...
- 一、Hadoop基本操作命令
查看hadoop版本 hadoop version 启动与关闭 启动Hadoop 1. 进入HADOOP_HOME目录. 2. 执行sh bin/start-all.s ...