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星球有非常多城市,每一个城 ...
随机推荐
- 通过Jenkins调用自动部署war包及jar包到服务器上的Shell脚本
1)部署war包#!/bin/bashif [ id>0];then echo"stopproject" kill −9 idelse echo "project ...
- 重写strcpy函数,以实现strcpy的功能
char * strcpyTest(char *dst,const char *src);Action(){ char *ptr=(char*)malloc(100); char a[]={" ...
- Win10权限问题
通过组策略打开Administrator用户后,Edge.图片查看器等内置程序不能使用,提示“无法使用内置管理员账户打开” 网上的方法: 1.组策略:本地安全策略编辑器——安全设置——本地策略——安全 ...
- [机器视觉] SIFT特征-尺度不变特征理解
SIFT特征-尺度不变特征理解 简介 SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述.这种描述具有尺度不变性 ...
- HTML5中的webSocket、ajax、http
本文原链接:https://cloud.tencent.com/developer/article/1115496 https://cloud.tencent.com/developer/articl ...
- python_93_面向对象实例2
class Role: def __init__(self,name,role,weapon,life_value=100,money=15000): '构造函数:实例化时做一些类的初始化工作' se ...
- SQL Server将列以分隔符分割后存到临时表
begin if object_id('tempdb..#t') is not null drop table #t; create table #t ( filepath ) ); declare ...
- Sublime +Markdown+OmniMarkupPreviewer 搭建实时预览的markdown编辑器
浏览器实时预览 <meta http-equiv="refresh" content="0.1"> auto save 的配置 {"aut ...
- cocos2d-x中的基本动作
判断一个精灵被点击: 1.层要接收点击消息.2.回调函数中取得点击坐标.3.取得精灵用boudingBox().containsPoint函数判断.(或使用 convertTouchToNodeSpa ...
- APP上线碰到的问题:Non-public API usage
①.Non-public API usage:The app references non-public symbols in XXXX: _UICreateCGImageFromIOSurface ...