Problem Description

某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。

现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。

Input

本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。

Output

对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.

Sample Input

3 3
0 1 1
0 2 3
1 2 1
0 2
3 1
0 1 1
1 2

Sample Output

2
-1

思路:求两点最短路,Dijkstra 标准版模版直接处理即可

Source Program

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-6
#define MOD 16007
#define INF 0x3f3f3f3f
#define N 10001
#define LL long long
using namespace std;
int n,m;
struct Edge{//边int from;//下一条边的编号int to;//边到达的点int dis;//边的长度Edge(int f,int t,int d){//构造函数from=f;to=t;dis=d;}
};struct HeapNode{//Dijkstra用到的优先队列的结点int dis;//点到起点距离int u;//点的序号HeapNode(int a,int b){dis=a;u=b;}bool operator < (const HeapNode &rhs) const  {return dis > rhs.dis;}
};struct Dijkstra{int n,m;//边数、点数,均从0开始vector<Edge> edges;//边列表vector<int> G[N];//每个结点出发的边的编号bool vis[N];//是否走过int dis[N];//起点s到各点的距离int p[N];//从起点s到i的最短路中的最后一条边的编号void init(int n) {//初始化this->n = n;for(int i=0;i<n;i++) //清空邻接表G[i].clear();edges.clear();//清空边列表}void AddEdge(int from,int to,int diss) {//添加边,若为无向图,调用两次edges.push_back(Edge(from,to,diss));m=edges.size();//边的个数G[from].push_back(m-1);//添加至边列表}void dijkstra(int s) {//求s到所有点的距离memset(dis,INF,sizeof(dis));memset(vis,false,sizeof(vis));dis[0]=0;priority_queue<HeapNode> Q;//优先队列Q.push(HeapNode(0,s));while(!Q.empty()) {HeapNode x=Q.top();Q.pop();int u=x.u;if(vis[u])//若已被访问continue;vis[u]=true;//标记为已访问for(int i=0;i<G[u].size();i++) {//枚举所有与当前点相连的边Edge &e=edges[G[u][i]];if(dis[e.to] > dis[u]+e.dis) {//更新距离dis[e.to] = dis[u]+e.dis;Q.push(HeapNode(dis[e.to],e.to));}}}}
}DJ;int main()
{while(scanf("%d%d",&n,&m)!=EOF&&(n+m)){DJ.init(n);//初始化for(int i=0;i<m;i++){int x,y,dis;scanf("%d%d%d",&x,&y,&dis);DJ.AddEdge(x,y,dis);DJ.AddEdge(y,x,dis);}int start,endd;scanf("%d%d",&start,&endd);DJ.dijkstra(start);if(DJ.dis[endd]==INF)printf("-1\n");elseprintf("%d\n",DJ.dis[endd]);}return 0;
}

畅通工程续(HDU-1874)相关推荐

  1. HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址:          http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...

  2. HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)

    畅通工程续 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修 ...

  3. hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...

  4. HDU 1874 畅通工程续 Floyd

    畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Time Limit: 3000/1000 MS (Java/Others) Memory L ...

  5. 杭电 hdu 1874 畅通工程续

    第二次 /* THE PROGRAM IS MADE BY PYY */ /*------------------------------------------------------------- ...

  6. hdu 1874畅通工程续(基础Floyd)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  7. HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  8. HDU 1874 畅通工程续

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. HDU 1874 畅通工程续 最短路

    畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 某 ...

  10. poj 2244 最短路 和 poj 1874 畅通工程续 dijkstra(迪杰斯特拉)

    畅通工程续,题目链接,点击这里, 畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...

最新文章

  1. job for nginx.service failed_用Python操作Kubernetes的Job
  2. 系统故事 --- 让系统讲故事
  3. 用API获得Internet Explorer_Server类的HTML
  4. 手写实现简单的Vue事件总线
  5. Ubuntu 常用工具、指令安装
  6. opengl源码 实现无缝切换图片过场_OpenGL学习笔记(六)变换
  7. centos5 vnc安装配置
  8. office 在线编辑 java_JAVA调用PageOffice在线打开、编辑Word文档
  9. 全国市级城市拼音-中文对照表(json格式)
  10. 联通发送wap push备忘录
  11. 雅虎助手是如何自杀式攻击360安全卫士的?雅虎助手,3721是什么恶心人的--(部份转贴)
  12. Arduino 利用ADS1115 AD转换模块进行数据读取
  13. 软件测试工程师未来十年的职业规划
  14. [OpenCV] 练习题实现代码 使用 cv.addWeighted 函数在文件夹中创建图像的幻灯片放映,并在图像之间进行平滑过渡
  15. [linux-023]在thinkpad T480上安装ubuntu 20.04 LTS
  16. 基于物理的渲染PBR(二):挑战手写pbr和IBL环境光部分的见解
  17. 联网游戏,面部表情捕捉,New Prefabs工作流程预览以及Unite Berlin的更多功能
  18. Android版本对照
  19. Java基础语法总结(一)——类与对象
  20. Hexo站点SEO优化攻略

热门文章

  1. 男人一生要做的九件事情
  2. python 内存分析工具_[转] python运行时内存分析工具meliae
  3. 阿里云的这个智能编码插件真心好用!Java 开发神器!!!
  4. 记一次阿里面试题:都有哪些进程间通信方式?麻烦你不要再背了
  5. redis分布式锁,面试官请随便问,我都会
  6. 张一鸣:优秀年轻人的五个特点
  7. nginx负载均衡基于ip_hash的session粘帖
  8. AutoEncoder、RBM、DBM、DBN
  9. 重定向 302 与localhost 学习笔记
  10. Oracle Data Integrator之代理创建