博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU - 1874 畅通工程续(迪杰斯特拉)
阅读量:6953 次
发布时间:2019-06-27

本文共 1195 字,大约阅读时间需要 3 分钟。

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

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 30 1 10 2 31 2 10 23 10 1 11 2

Sample Output

2-1
#include 
#include
#include
#include
#include
#include
using namespace std;#define ll long longconst int inf = 0x3f3f3f3f;const int maxn = 1e4+8;int n, m, dis[maxn][maxn], len[maxn], s, e;bool sign[maxn];void dij(int start){ fill(len, len+n+1, inf); fill(sign, sign+n+1, 0); len[start] = 0; for(int i = 0 ; i
len[miao]+dis[miao][j]) len[j] = len[miao]+dis[miao][j]; } }}int main(){ while(~scanf("%d%d", &n, &m)) { for(int i = 0; i
x) dis[a][b] = dis[b][a] = x; } scanf("%d%d", &s, &e); dij(s); if(len[e] == inf)printf("-1\n"); else printf("%d\n", len[e]); } return 0;}

 

转载于:https://www.cnblogs.com/RootVount/p/10560786.html

你可能感兴趣的文章
NIS
查看>>
QuickReport的相关设置
查看>>
流之阅读器和书写器(简介)
查看>>
[情人节]今天你用了那个“约会神器”
查看>>
spring 集成 druid
查看>>
linux用inotify同步文件
查看>>
设计实现一个简易通讯录,要求使用结构体
查看>>
向eigrp区域注入默认路由三种方法
查看>>
push代码到code.google.com出错问题解决
查看>>
sitemesh 全局导航页
查看>>
【沫沫金】安卓手机版 - 日期控件
查看>>
iOS中多控制器管理(上) UINavigationController
查看>>
思科交换机IOS备份和升级
查看>>
我的友情链接
查看>>
html 选择器的优先权和权重的计算
查看>>
netfilter的filter表案列与nat表应用
查看>>
jquery实现简单瀑布流代码
查看>>
结对编程讲义-PPT
查看>>
源码下载
查看>>
修改Linux系统参数以支持单机同时打开数百万文件句柄
查看>>