hdu5137
2016-03-22 20:55
423 查看
链接:点击打开链接
题意:给定一个有向图,问去点2~N-1中的一个点后,从1到N的最大距离
代码:
题意:给定一个有向图,问去点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; }
相关文章推荐
- TCP通信和UDP通信练习
- Java输入输出流
- 如何创建struts2第一个程序及其原理解释
- leetcode_064 Minimun Path Sum
- zjnu1749 PAROVI (数位dp)
- lanmp脚本
- Mac常用快捷键+设置
- RHCE7.0-搭建基于NFS网络文件系统服务
- IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统
- 构造函数
- 交叉编译器的安装方法
- Ubuntu命令学习(二)
- 第六届CCF 第三题 画图
- IT行业导览-引言
- Solution to Triangle by Codility
- oc-15-匿名对象
- 简易的2048
- mysql
- 九章算法8:Data Structure
- [POJ 2195]Going Home[费用流]