畅通工程续(HDU-1874)
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 2Sample 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)相关推荐
- HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...
- HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)
畅通工程续 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修 ...
- hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...
- HDU 1874 畅通工程续 Floyd
畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Time Limit: 3000/1000 MS (Java/Others) Memory L ...
- 杭电 hdu 1874 畅通工程续
第二次 /* THE PROGRAM IS MADE BY PYY */ /*------------------------------------------------------------- ...
- hdu 1874畅通工程续(基础Floyd)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 1874 畅通工程续
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 1874 畅通工程续 最短路
畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 某 ...
- poj 2244 最短路 和 poj 1874 畅通工程续 dijkstra(迪杰斯特拉)
畅通工程续,题目链接,点击这里, 畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
最新文章
- job for nginx.service failed_用Python操作Kubernetes的Job
- 系统故事 --- 让系统讲故事
- 用API获得Internet Explorer_Server类的HTML
- 手写实现简单的Vue事件总线
- Ubuntu 常用工具、指令安装
- opengl源码 实现无缝切换图片过场_OpenGL学习笔记(六)变换
- centos5 vnc安装配置
- office 在线编辑 java_JAVA调用PageOffice在线打开、编辑Word文档
- 全国市级城市拼音-中文对照表(json格式)
- 联通发送wap push备忘录
- 雅虎助手是如何自杀式攻击360安全卫士的?雅虎助手,3721是什么恶心人的--(部份转贴)
- Arduino 利用ADS1115 AD转换模块进行数据读取
- 软件测试工程师未来十年的职业规划
- [OpenCV] 练习题实现代码 使用 cv.addWeighted 函数在文件夹中创建图像的幻灯片放映,并在图像之间进行平滑过渡
- [linux-023]在thinkpad T480上安装ubuntu 20.04 LTS
- 基于物理的渲染PBR(二):挑战手写pbr和IBL环境光部分的见解
- 联网游戏,面部表情捕捉,New Prefabs工作流程预览以及Unite Berlin的更多功能
- Android版本对照
- Java基础语法总结(一)——类与对象
- Hexo站点SEO优化攻略