find the longest of the shortest

Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 1916    Accepted Submission(s): 668

Problem Description
Marica is very angry with Mirko because he found a new girlfriend and 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.
 
Input
Each 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.
 
Output
In the first line of the output file write the maximum time in minutes, it could take Marica to come to Mirko.
 
Sample Input
5 6
1 2 4
1 3 3
2 3 1
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
 
Sample Output
11
13
27
 
先求整个的最短路,并记录下最短路经,再分别枚举删除最短路经上的每一条边。并再次求最短路,答案即最长的那条最短路。

代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#pragma comment (linker,"/STACK:102400000,102400000")
#define maxn 1010
#define MAXN 2005
#define mod 1000000009
#define INF 0x3f3f3f3f
#define pi acos(-1.0)
#define eps 1e-6
typedef long long ll;
using namespace std; struct Edge
{
int v,w;
int next;
}edge[maxn*maxn]; int head[maxn],inq[maxn],inqtime[maxn],dist[maxn];
int path[maxn];
int N,num,m,a[maxn],ok;
bool flag[maxn]; void addedge(int u,int v,int w)
{
edge[num].v=v;
edge[num].w=w;
edge[num].next=head[u];
head[u]=num++;
edge[num].v=u;
edge[num].w=w;
edge[num].next=head[v];
head[v]=num++;
} int SPFA(int s,int n)
{
int i;
memset(inq,0,sizeof(inq));
memset(dist,INF,sizeof(dist));
if (ok)
{
for (int i=0;i<=n;i++)
path[i]=-1;
}
path[s]=0;
queue<int>Q;
inq[s]=1;
dist[s]=0;
Q.push(s);
while (!Q.empty())
{
int u=Q.front();
Q.pop();
inq[u]=0;
for (i=head[u];i;i=edge[i].next)
{
if (dist[ edge[i].v ]>dist[u]+edge[i].w)
{
if (ok)
path[ edge[i].v ]=u;
dist[ edge[i].v ]=dist[u]+edge[i].w;
if (!inq[ edge[i].v ])
{
inq[ edge[i].v ]=1;
Q.push(edge[i].v);
}
}
}
}
return dist[N];
} int main()
{
int i,j;
while (~scanf("%d%d",&N,&m))
{
int u,v,w;
memset(head,0,sizeof(head));
num=1;
ok=1;
for (i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
}
// printf("num=%d\n",num);
SPFA(1,N);
ok=0;
j=N;
int ans=-1;
while (path[j]>0)
{
int x,y,value;
for (int i=head[j];i!=0;i=edge[i].next)
{
if (edge[i].v==path[j])
{
x=i;
value=edge[i].w;
edge[i].w=INF;
break;
}
}
for (int i=head[path[j]];i!=0;i=edge[i].next)
{
if (edge[i].v==j)
{
y=i;
edge[i].w=INF;
break;
}
}
ans=max(ans,SPFA(1,N));
edge[x].w=value;
edge[y].w=value;
// printf("j=%d\n",j);
j=path[j];
}
// printf("\n%d\n",path[1]);
printf("%d\n",ans);
}
return 0;
}

最新文章

  1. react自学笔记总结不间断更新
  2. C#中自己动手创建一个Web Server(非Socket实现)
  3. spring mvc统一异常处理(@ControllerAdvice + @ExceptionHandler)
  4. Unity使用protobuf-net进行二进制序列化与反序列化
  5. 接触到得到新语言里面涉及到很多关于ECMscript相关知识,所以还是来总结一下吧
  6. iOS设置导航栏标题
  7. mysql-5.6.14-winx64免安装配置
  8. Jquery easyui的validatebox控件和正则表达式
  9. cocos2d-x 3.2读取xml和json练习
  10. EXTJS 4.2 资料 控件之隐藏显示setVisible、只读setDisabled
  11. 关于ContentProvider的批量操作
  12. javascript 原生 cookie 处理
  13. netty中实现客户端首次连接绑定并非每次read检查的方法
  14. 【转】国外程序员收集整理的PHP资源大全
  15. iOS工程师常用的命令行命令总结
  16. C#学习笔记-适配器模式
  17. 移动端 -webkit-user-select:text; ios10 bug 解决方案
  18. RHEL6安装python包tornado
  19. react native navigationOptions中不能获取this
  20. Gulp的简单使用

热门文章

  1. 关于MongoDB分布式高可用集群实现
  2. GitHub中国区前100名到底是什么样的人?(转载)
  3. CodeIgniter实现读写分离
  4. 九度oj 题目1120:全排列
  5. BZOJ 4259 残缺的字符串 ——FFT
  6. NOI2015 荷马史诗 【k-哈夫曼树】
  7. 【NOI2012】骑行川藏
  8. jenkins执行自动化用例(详细、有用、mark 优先级高高高)
  9. linux 安装软件出现/tmp 磁盘不足时 解决方案
  10. MYsql 锁详解 锁 与索引的关系