(dijkstra记录路径)find the longest of the shortest

Marica对Mirko很生气,因为他找到了一个新的女朋友,她想报仇。由于她不住在同一个城市,她开始为长途旅行做准备。我们知道每条路从一个城市到另一个城市需要多少分钟。

米尔科在车里无意中听到其中一条路正在维修,路被堵住了,但不知道具体是哪条路。无论哪条路是封闭的,从马里卡的城市到米尔科的都是可能的。

玛丽卡只走不堵塞的路,而且走最短的路。米尔科想知道她在最坏的情况下要多久才能到达他的城市,这样他就能确保他的女朋友离开这个城市足够长时间。编写一个程序,帮助Mirko找出Marica从没有堵塞的道路到他所在城市的最短路线所需要的几分钟内最长的时间。

输入

每一种情况都有两个数字在第一行,N和M,由一个单独的空间,城镇的数量,和城镇之间的道路的数量分开。1≤N≤1000,1≤≤N *(N - 1)/ 2。这些城市的编号从1到N, Mirko位于城市1,Marica位于城市N。

接下来的M行是三个数字A、B和V,用逗号隔开。1≤B≤N 1 V≤≤1000。这些数字意味着a和B城市之间有一条双向道路,而且在V分钟内是可以交叉的。

输出

在输出文件的第一行中以分钟为单位写入最大时间,Marica可能需要花几分钟才能到达Mirko。

样例输入

5 6

1 2 4

1 3 3

1 2 3

2 4 4

2 5 7

4 5 1

6 7
1 2 1

2 3 4

3 4 4

4 6 4

1 5 5

2 5 2

5 6 5

5 7

1 2 8

1 4 10

2 3 9

2 4 10

2 5 1

3 4 7

3 5 10

样例输出

11

13

27

题意:
最短指时间最短,坏一条边,此时的最短路的时间比其他坏一条边之后的最短路的时间长,输出这个时间

分析与解答

如果拆掉的边不在最初的最短路上,那么最短路的长度是不会变化的。
那么就只拆最短路上的边。
(上句话参考:http://blog.sina.com.cn/s/blog_8d84b9240101f827.html)
这样我们拆的范围就减小了,怎么算得上拆,就是让两个路的距离变成inf即可。由于拆的是最短路上的边,所以我们还要记录最短路的路径。拆完之后我们再调用dijkstra,此时我们不用再记录最短路的路径,而且调用完我们还得恢复拆的路,以便下一次拆其他不同的路。

我们看看怎么记录路径:

for(j=1;j<=m;j++)
if(!vis[j]&&dis[k]+map[k][j]<dis[j]){dis[j]=dis[k]+map[k][j];p[j]=k;//p数组记录路径 ,即j点前驱}   

我们找到了起点到终点k的最短路dis[k],现在以k为起点更新以其他点为终点的最短路dis[j],虽然有可能dis[j]再接下来的循环中会更短,但是没事,我们的路径的记录同样也会变的,所以我就可以在每次循环中就认定最短路中j的前驱就是k

代码参考:
https://blog.csdn.net/z8110/article/details/50061289

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 0x3f3f3f3f
using namespace std;
int map[1100][1100],dis[1100],vis[1100],i,j,k,l,m,n,x,y,z,p[1100];
void dj(int v)//迪杰斯特拉算法 
{int i,j,k;memset(vis,0,sizeof(vis));memset(dis,N,sizeof(dis));dis[1]=0;//标记开始点已经被使用 for(i=1;i<=m;i++){int Min=N;for(j=1;j<=m;j++){if(!vis[j]&&dis[j]<Min){Min=dis[j];k=j;}}if(Min==N)//优化,如果没有找到较小的,直接结束 return ;vis[k]=1;for(j=1;j<=m;j++)if(!vis[j]&&dis[k]+map[k][j]<dis[j]){dis[j]=dis[k]+map[k][j];if(v)p[j]=k;//p数组记录路径 ,即j点前驱}   }
}
int main()
{while(scanf("%d%d",&m,&n)!=EOF){memset(p,0,sizeof(p));memset(map,N,sizeof(map));
//        for(i=1;i<=m;i++)
//        map[i][i]=0;for(i=0;i<n;i++){scanf("%d%d%d",&x,&y,&z);if(map[x][y]>z)map[x][y]=map[y][x]=z;}//int ans=dj(1);//printf("++%d\n",ans);dj(1);//以1为起点 int Max=dis[m];for(i=m;i!=1;i=p[i])//从m开始是因为p[j]=k是k连的j,一直到m {z=map[i][p[i]];//把当前点和路径上的当前点的下一个点断开 map[i][p[i]]=map[p[i]][i]=N;dj(0);// 删边之后路径会改变,只记录未删时候的路径Max=max(Max,dis[m]); map[i][p[i]]=map[p[i]][i]=z;//再连上 }printf("%d\n",Max);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

友元是c还是java_[C++]【类】友元的三种声明及注意事项

类允许其他类或者函数访问它的非公有成员&#xff0c;但我们需要将访问类非公有成员的其他类或者函数成为它的友元。一、友元函数如果类想要把一个函数作为他的友元&#xff0c;只需要增加一条以 friend 关键字开始的函数声明语句即可。例如&#xff1a;class A{friend void fr…

(SPFA+最短路变形+回路对起点的影响)Arbitrage

套利是利用货币汇率的差异将一种货币的一个单位转换为同一货币的多个单位。例如&#xff0c;假设1美元兑0.5英镑&#xff0c;1英镑兑10.0法国法郎&#xff0c;1法国法郎兑0.21美元。然后&#xff0c;通过兑换货币&#xff0c;一个聪明的交易者可以从1美元开始购买0.5 * 10.0 * …

java 金庸群侠传_《金庸群侠传》MOD发展史(官方版本 转自铁血丹心论坛)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼三、MOD初期在事件修改器和场景编辑器被制作出来之后&#xff0c;修改档的制作被引向了新的方向。(此后包括事件修改的“修改档”即可称之为“MOD”&#xff0c;但由于修改的量比较小&#xff0c;故以“初期”命名)这一时期的第一个…

(模拟+floyd)Saving James Bond

题目&#xff1a; This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake filled with…

python从数据库取数据 显示字段名_如何在python中将SQL数据库中的字段名放入列表中...

以下是我目前掌握的代码&#xff1a;from ConfigParser import *import MySQLdbconfiguration ConfigParser()configuration.read(someconfigfile.conf)db MySQLdb.connect(host configuration.get(DATABASE, MYSQL_HOST),user configuration.get(DATABASE, MYSQL_USER),pa…

详解最短路算法模板(dijkstra+floyd+spfa)

1.Floyd_Warshall算法 核心思路&#xff1a;d[i][j] min{d[i][j], d[i][k] d[k][j]} 从i到j有两种路径&#xff0c;经过k点或是不经过k点&#xff0c;所以我们枚举k即可求所有路的最短路。 适用范围&#xff1a;求任意两点间的最短路&#xff0c;可以有负权&#xff0c;可以…

tomcat java垃圾回收_tomcat启动参数配置,内存和垃圾回收

一般情况下&#xff1a;JAVA_OPTS-Xms2048m -Xmx2048m -XX:MaxPermSize512m -XX:UseParallelGC -XX:ParallelGCThreads8 -XX:UseParallelOldGC -Xloggc:../logs/jvm-gc.log -XX:PrintGCDetails -XX:PrintGCTimeStamps适合于实时要求比较高&#xff1a;-Xms2048m -Xmx2048m -Xmn…

(dijkstra算法+多权值)最短路径问题

给你n个点&#xff0c;m条无向边&#xff0c;每条边都有长度d和花费p&#xff0c;给你起点s终点t&#xff0c;要求输出起点到终点的最短距离及其花费&#xff0c;如果最短距离有多条路线&#xff0c;则输出花费最少的。 Input 输入n,m&#xff0c;点的编号是1~n,然后是m行&am…

java 重定向关键字_SpringMVC 转发、重定向

转发、重定向到其它业务方法org.springframework.stereotype.ControllerRequestMapping("/userController")public classUserController{RequestMapping("/handler1")public String handler1() throwsIOException {//转发给handler2处理return "forwa…

(多源转化成单源dijsktra)一个人的旅行

虽然草儿是个路痴&#xff08;就是在杭电待了一年多&#xff0c;居然还会在校园里迷路的人&#xff0c;汗~),但是草儿仍然很喜欢旅行&#xff0c;因为在旅途中 会遇见很多人&#xff08;白马王子&#xff0c;^0^&#xff09;&#xff0c;很多事&#xff0c;还能丰富自己的阅历&…

最短路模板题

题目&#xff1a; 在每年的校赛里&#xff0c;所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候&#xff0c;却是非常累的&#xff01;所以现在他们想要寻找最短的从商店到赛场的路线&#xff0c;你可以帮助他们吗…

php 取经纬度,php根据地址获取百度地图经纬度的实例方法

首先我们来看全部实例代码&#xff1a;/*** param string $address 地址* param string $city 城市名* return array*/function getLatLng($address‘‘,$city‘‘){$result array();$ak ‘‘;//您的百度地图ak&#xff0c;可以去百度开发者中心去免费申请$url "http://…

(kruskal算法复习+模板)Eddy's picture

题目&#xff1a; Eddy begins to like painting pictures recently ,he is sure of himself to become a painter.Every day Eddy draws pictures in his small room, and he usually puts out his newest pictures to let his friends appreciate. but the result it can be…

php解密 eval( base64_decode,PHP之eval(gzinflate(base64_decode加密解密

从网上下载了个php版本的小游戏站的源码&#xff0c;一直都没有时间看&#xff0c;今天闲着没事看了下各个文件夹的内容&#xff0c;有一个文件引起了小胡的注意&#xff0c;文件名为php.php&#xff0c;打开之后发现了是加密过后的php文件&#xff0c;于是试着找了下相关的解密…

(kruskal)Jungle Roads

题目 The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly, so the large road network is too expensive to mainta…

php 留言板分页显示,php有分页的留言板,留言成功后怎么返回当前页?

比如我在【index.php?p3】发布留言&#xff0c;成功后怎么返回到 index.php?p3 这个页面&#xff1f;在【index.php?p5】发布留言成功后怎么返回index.php?p5这个页面&#xff1f;location.href"这里该怎么写&#xff1f;"涉及的页面有index.php&#xff0c;doac…

(最短路)HDU Today(hdu2112)

题目 Problem Description 经过锦囊相助&#xff0c;海东集团终于度过了危机&#xff0c;从此&#xff0c;HDU的发展就一直顺风顺水&#xff0c;到了2050年&#xff0c;集团已经相当规模了&#xff0c;据说进入了钱江肉丝经济开发区500强。这时候&#xff0c;XHD夫妇也退居了…

php文件读取文件内容,PHP文件系统函数-读取文件内容几种方式

介绍几种php获取文件内容的方式介绍读取文件的方式之前&#xff0c;我们先看一下打开文件资源和关闭资源名字资源绑定到一个流 - fopen关闭一个已打开的文件指针 - fclose$handle1 fopen("/home/rasmus/file.txt", "r");fclose($hanle1);$handle2 fopen(…

欧几里得算法和扩展欧几里得算法详解

欧几里得算法&#xff1a; int gcd(int x,int y){if(y) return gcd(y,x%y);return x; }扩展欧几里得算法&#xff1a; 先说一个整体思路&#xff1a; 先求AxBygcd(A,B);的一个解x&#xff0c;y 然后我们可以求他的通解 然后求AxByC的通解 我们先看看怎么求AxBygcd(A,B);的一…

php class使用方法,PHP调试类Krumo使用教程

写程序最讨厌的是程序发生错误&#xff0c;但是却又不知道该从何debug起&#xff0c;我们通常会使用print_r 或者 var_dump 或者是 echo 慢慢的debug。如果你跟我一样使用PHP 5开发&#xff0c;现在可以使用Krumo这个简单好用的工具帮助我们做这件事情。虽然IDE也有内建的debug…