您的位置:首页 > 其它

hdu5137

2016-03-22 20:55 423 查看
链接:点击打开链接

题意:给定一个有向图,问去点2~N-1中的一个点后,从1到N的最大距离

代码:

#include <queue>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
const int INF=0x3f3f3f3f;
using namespace std;
struct edge{
int to,cost;
};
int V,d[10005];
vector<edge> G[10005];
typedef pair<int,int> P;
void dijkstra(int s,int cnt){
int i,v;
priority_queue<P,vector<P>,greater<P> >que;
fill(d,d+V+1,INF);
d[s]=0;
que.push(P(0,s));
while(!que.empty()){
P p=que.top(); que.pop();
v=p.second;
if(d[v]<p.first||v==cnt)
continue;
for(i=0;i<G[v].size();i++){
edge e=G[v][i];
if(e.to==cnt)                       //遇到不能选的点直接跳过
continue;
if(d[e.to]>d[v]+e.cost){
d[e.to]=d[v]+e.cost;
que.push(P(d[e.to],e.to));
}
}
}
}                                               //dijkstra模板
int main(){
int m,i,j,x,y,z,ans;
edge temp;
while(scanf("%d%d",&V,&m)!=EOF&&(V||m)){
for(i=0;i<V;i++)
G[i].clear();
for(i=0;i<m;i++){
scanf("%d%d%d",&x,&y,&z);
G[x].push_back((edge){y,z});
G[y].push_back((edge){x,z});
}
ans=0;
for(i=2;i<V;i++){
dijkstra(1,i);
ans=max(ans,d[V]);
}
if(ans==INF)
puts("Inf");
else
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: