hdu1595 最短路问题(dijkstra&&spfa)
find the longest of the shortest
Time Limit: 1000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2424 Accepted Submission(s): 846
she seeks revenge.Since she doesn't live in the same city, she started
preparing for the long journey.We know for every road how many minutes
it takes to come from one city to another.
Mirko overheard in the
car that one of the roads is under repairs, and that it is blocked, but
didn't konw exactly which road. It is possible to come from Marica's
city to Mirko's no matter which road is closed.
Marica will travel
only by non-blocked roads, and she will travel by shortest route. Mirko
wants to know how long will it take for her to get to his city in the
worst case, so that he could make sure that his girlfriend is out of
town for long enough.Write a program that helps Mirko in finding out
what is the longest time in minutes it could take for Marica to come by
shortest route by non-blocked roads to his city.
case there are two numbers in the first row, N and M, separated by a
single space, the number of towns,and the number of roads between the
towns. 1 ≤ N ≤ 1000, 1 ≤ M ≤ N*(N-1)/2. The cities are markedwith
numbers from 1 to N, Mirko is located in city 1, and Marica in city N.
In
the next M lines are three numbers A, B and V, separated by commas. 1 ≤
A,B ≤ N, 1 ≤ V ≤ 1000.Those numbers mean that there is a two-way road
between cities A and B, and that it is crossable in V minutes.
13
27
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
const int INF=0x7fffffff;
int map[maxn][maxn];
bool vis[maxn];
int pre[maxn];
int n,m;
int dis[maxn];
void dijkstra(int start){
for(int i=;i<=n;i++)
dis[i]=INF;
memset(vis,false,sizeof(vis));
dis[]=;
for(int i=;i<=n;i++){
int k=-;
int tmin=INF;
for(int j=;j<=n;j++){
if(!vis[j]&&dis[j]<tmin){
tmin=dis[j];
k=j;
}
} vis[k]=true;
for(int j=;j<=n;j++){
if(map[k][j]!=INF)
if(!vis[j]&&dis[k]+map[k][j]<dis[j]){
dis[j]=dis[k]+map[k][j];
if(start)
pre[j]=k;
}
}
}
} int main(){
while(scanf("%d%d",&n,&m)!=EOF){ for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(i==j)
map[i][j]=;
else
map[i][j]=map[j][i]=INF;
}
} int u,v,w;
for(int i=;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
map[u][v]=map[v][u]=w;
}
memset(pre,,sizeof(pre));
dijkstra();
int ans=dis[n];
// printf("---->%d\n",ans);
for(int i=n;i!=;i=pre[i]){
int temp=map[i][pre[i]];
map[i][pre[i]]=INF;
map[pre[i]][i]=INF;
dijkstra();
if(dis[n]>ans)
ans=dis[n];
// printf("--->%d\n",temp);
map[i][pre[i]]=temp;
map[pre[i]][i]=temp;
}
printf("%d\n",ans); }
return ;
}
spfa算法实现
#include<stdio.h>
#include<queue>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
using namespace std;
const int MAXN=;
const int INF=0x7fffffff;
struct Edge
{
int v;
int cost;
Edge(int _v=,int _cost=):v(_v),cost(_cost) {}
};
vector<Edge>E[MAXN];
void addedge (int u,int v,int w)
{
E[u].push_back(Edge(v,w));
E[v].push_back(Edge(u,w));
}
bool vis[MAXN];//在队列标志
int dist[MAXN];
int pre[MAXN];
int n,m;
void spfa(int x,int y,int judge)
{
memset(vis,false,sizeof(vis));
for(int i=; i<=n; i++)
dist[i]=INF;
vis[]=true;
dist[]=;
queue<int>que;
while(!que.empty())
que.pop();
que.push();
while(!que.empty())
{
int u=que.front();
que.pop();
vis[u]= false;
for(int i=; i<E[u].size(); i++)
{
int v=E[u][i].v;
if((u==x&&v==y)||(u==y&&v==x))
continue;
if(dist[v]>dist[u]+E[u][i].cost)
{
dist[v]=dist[u]+E[u][i].cost;
if(judge)
pre[v]=u;
if(!vis[v])
{
vis[v]= true;
que.push(v);
}
}
}
} }
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=;i<=n;i++)
E[i].clear();
int u,v,w;
for(int i=;i<=m;i++ ){
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
}
memset(pre,,sizeof(pre));
spfa(,,);
int ans=dist[n];
for(int i=n;i!=;i=pre[i]){
spfa(i,pre[i],);
int temp=dist[n];
if(temp>ans)
ans=temp;
}
printf("%d\n",ans);
}
return ;
}
hdu1595 最短路问题(dijkstra&&spfa)的更多相关文章
- 最短路问题 Floyd+Dijkstra+SPFA
参考博客:https://blog.csdn.net/qq_35644234/article/details/60875818 题目来源:http://acm.hdu.edu.cn/showprobl ...
- POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)
传送门 Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 46727 Acce ...
- 怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33015 Accepted ...
- 图上最短路(Dijkstra, spfa)
单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出发点的编号. 接下来 ...
- hdu 2066 ( 最短路) Floyd & Dijkstra & Spfa
http://acm.hdu.edu.cn/showproblem.php?pid=2066 今天复习了一下最短路和最小生成树,发现居然闹了个大笑话-----我居然一直写的是Floyd,但我自己一直以 ...
- 几个小模板:topology, dijkstra, spfa, floyd, kruskal, prim
1.topology: #include <fstream> #include <iostream> #include <algorithm> #include & ...
- dijkstra spfa prim kruskal 总结
最短路和最小生成树应该是很早学的,大家一般都打得烂熟,总结一下几个问题 一 dijkstra O((V+E)lgV) //V节点数 E边数 dijkstra不能用来求最长路,因为此时局部最优解已经 ...
- HDU Today HDU杭电2112【Dijkstra || SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=2112 Problem Description 经过锦囊相助,海东集团最终度过了危机,从此.HDU的发展就一直顺风 ...
- find the safest road HDU杭电1596【Dijkstra || SPFA】
pid=1596">http://acm.hdu.edu.cn/showproblem.php?pid=1596 Problem Description XX星球有非常多城市,每一个城 ...
随机推荐
- SharePoint 2013 缺少站点保存为模板选项
如果您尝试在SharePoint Server 2013中保存站点,我们没有看到“将站点另存为模板”选项,则可能是因为该站点已启用站点发布功能.如 之前文章提到 “SharePoint 2010 缺少 ...
- 如何用Windows PowerShell替换命令提示符
在Windows 10的"开始"按钮中将PowerShell替换为命令提示符,这不是很好吗?我知道你会有疑问,为什么要这样做?可能会失去了运行DOS命令的能力.好吧,让我解释一下. ...
- LoadRunner使用(2)
一.基础函数 在VU左边导航栏中,有三个LoadRunner框架函数,分别是Vuser_init(),Action(),vuser_end().这三个函数存在于任何Vuser类型的脚本中. vuser ...
- Python + selenium之unitest(2)
unittest单元测试框架中重要的概念: 1.Test Case 一个Test Case实例就是一个测试用例.在一个完整的测试流程中,包括测试前准备环境的搭建(setUp),实现测试过程的代码(ru ...
- pc端常见布局---水平居中布局 单元素定宽
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 如何将SAP Multi Target应用部署到SAP云平台的Cloud Foundry环境去
SHINA是SAP HANA Interactive Education的缩写,是一个demo应用,用于演示如何开发SAP HANA原生应用. 这个应用包含了sample数据以及HANA数据库表,vi ...
- 如何用JavaScript实现2+2=5?
我大学毕业找工作时,经常做一些稀奇古怪的面试题.这不,给大家分享一道整蛊的面试题,它其实不能算一道正式的面试题,大家可以用它来捉弄你们那些程序员朋友. 题目:如何用JavaScript实现2+2=5? ...
- 【UML】部署图Deployment diagram(实现图)(转)
http://blog.csdn.net/sds15732622190/article/details/49049665 前言 下面要介绍UML中的部署图,和构件图一样,它也属于实现图的一种,五种静态 ...
- Python-OpenCV中的cv2.inpaint()函数
概念 修复是图像插值.数字修复算法在图像插值,照片恢复,缩放和超分辨率等方面具有广泛的应用. 大多数人会在家里放一些旧的退化照片,上面有一些黑点,一些笔画等.你有没有想过恢复它?我们不能简单地在绘画工 ...
- a survey for RL
• A finite set of states St summarizing the information the agent senses from the environment at eve ...