http://acm.hdu.edu.cn/showproblem.php?pid=2680

Problem Description
One day , Kiki wants to visit one of her friends. As she is liable to carsickness , she wants to arrive at her friend’s home as soon as possible . Now give you a map of the city’s traffic route, and the stations which are near Kiki’s home so that she can take.
You may suppose Kiki can change the bus at any station. Please find out the least time Kiki needs to spend. To make it easy, if the city have n bus stations ,the stations will been expressed as an integer 1,2,3…n.
 
Input
There are several test cases. 

Each case begins with three integers n, m and s,(n<1000,m<20000,1=<s<=n) n stands for the number of bus stations in this city and m stands for the number of directed ways between bus stations .(Maybe there are several ways between two bus stations .) s stands
for the bus station that near Kiki’s friend’s home.

Then follow m lines ,each line contains three integers p , q , t (0<t<=1000). means from station p to station q there is a way and it will costs t minutes .

Then a line with an integer w(0<w<n), means the number of stations Kiki can take at the beginning. Then follows w integers stands for these stations.
 
Output
The output contains one line for each data set : the least time Kiki needs to spend ,if it’s impossible to find such a route ,just output “-1”.
 
Sample Input
5 8 5
1 2 2
1 5 3
1 3 4
2 4 7
2 5 6
2 3 5
3 5 1
4 5 1
2
2 3
4 3 4
1 2 3
1 3 4
2 3 2
1
1
 
Sample Output
1
-1
 

//这样的方法能够多个起点找最短路径。省时间

//Dijkstra

#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f
int map[1010][1010];
int dis[20200];
bool used[20200];
int n;
int e;
int dijkstra()
{
int i,j;
memset(used,0,sizeof(used));
for(i=0;i<=n;++i)
dis[i]=INF;
int pos;
for(i=0;i<=n;++i)//第一次给dis赋值
{
dis[i]=map[0][i];
}
dis[0]=0;
used[0]=1;
for(i=0;i<n;++i)//最多执行n次
{
int min=INF;
for(j=0;j<=n;++j)
{
if(!used[j]&&dis[j]<min)
{
min=dis[j];
pos=j;
}
}
used[pos]=1;
if(pos==e) return dis[pos];
for(j=0;j<=n;++j)//把dis数组更新。也叫松弛
{
if(!used[j]&&dis[j]>map[pos][j]+dis[pos])
{
dis[j]=map[pos][j]+dis[pos];
}
}
}
return -1;
}
int main()
{
int m,s,T;
int u,v,w;
int temp;
int i,j;
while(~scanf("%d%d%d",&n,&m,&e))
{
for(i=0;i<=n;++i)
for(j=0;j<=i;++j)
map[i][j]=map[j][i]=INF;
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&u,&v,&w);
if(map[u][v]>w)
map[u][v]=w;
}
scanf("%d",&T);
for(i=1;i<=T;++i)
{
scanf("%d",&temp);
map[0][temp]=0;//0指向要找的原点
}
int ans=dijkstra();//万能源点0
if(ans==-1)printf("-1\n");
else printf("%d\n",ans);
}
return 0;
}

//SPFA

#include <cstdio>
#include <cstring>
#include <queue>
#define MAXN 1100
#define MAXM 22000
#define INF 0x3f3f3f3f
using namespace std;
int map[MAXN][MAXN];
int vis[MAXN];//推断是否增加队列了
int num;
int low[MAXM];//存最短路径
int e;
int M, N;
void SPFA()
{
int i, j;
queue<int> Q;
memset(low, INF, sizeof(low));
memset(vis, 0, sizeof(vis));
vis[0] = 1;
low[0] = 0;
Q.push(0);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
vis[u] = 0;//出队列了。不在队列就变成0
for(i = 1; i <= N; ++i)
{ if(low[i] > low[u] + map[u][i])
{
low[i] = low[u] + map[u][i];
if(!vis[i])
{
vis[i]=1;
Q.push(i);
}
}
}
}
if(low[e] == INF) printf("-1\n");
else printf("%d\n",low[e]);
}
int main()
{
int u, v, w;
while(~scanf("%d%d%d", &N, &M, &e))
{
for(int i=0; i<=N;++i)
for(int j=0;j<=i;++j)
map[i][j]=map[j][i]=INF;
while(M--)
{
scanf("%d%d%d", &u, &v, &w);
if(map[u][v]>w)//一定要判重
map[u][v]=w;
// map[u][v]=w;
// map[v][u]=w;
}
int T,s;
scanf("%d",&T);
while(T--)
{
scanf("%d",&s);
map[0][s]=0;//万能源点
}
SPFA();
}
return 0;
}

Choose the best route HDU杭电2680【dijkstra算法 || SPFA】的更多相关文章

  1. 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)

    今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...

  2. 一个人的旅行 HDU杭电2066【dijkstra算法 || SPFA】

    pid=2066">http://acm.hdu.edu.cn/showproblem.php? pid=2066 Problem Description 尽管草儿是个路痴(就是在杭电 ...

  3. 『ACM C++』HDU杭电OJ | 1418 - 抱歉 (拓扑学:多面体欧拉定理引申)

    呕,大一下学期的第一周结束啦,一周过的挺快也挺多出乎意料的事情的~ 随之而来各种各样的任务也来了,嘛毕竟是大学嘛,有点上进心的人多多少少都会接到不少任务的,忙也正常啦~端正心态 开心面对就好啦~ 今天 ...

  4. 畅通project续HDU杭电1874【dijkstra算法 || SPFA】

    http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多 ...

  5. ACM: HDU 3790 最短路径问题-Dijkstra算法

    HDU 3790 最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  6. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  7. HDU Today HDU杭电2112【Dijkstra || SPFA】

    http://acm.hdu.edu.cn/showproblem.php?pid=2112 Problem Description 经过锦囊相助,海东集团最终度过了危机,从此.HDU的发展就一直顺风 ...

  8. find the safest road HDU杭电1596【Dijkstra || SPFA】

    pid=1596">http://acm.hdu.edu.cn/showproblem.php?pid=1596 Problem Description XX星球有非常多城市,每一个城 ...

  9. 升级降级(期望DP)2019 Multi-University Training Contest 7 hdu杭电多校第7场(Kejin Player)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意: 有 1~n 个等级,你现在是1级,求升到n级的花费期望.会给你n个条件(i~i+1级升级 ...

随机推荐

  1. Criteria 查询

    Criteria.Criterion接口和Expression类组成,他支持在运行时动态生成查询语句. Criteria查询是Hibernate提供的一种查询方式 Hibernate检索方式:  PO ...

  2. 一个.py引用另一个.py中的方法

    处理函数 X_Add_Y_Func.py #__author__ = 'Administrator' def add_func(x, y): return x+y 调用函数 X_Add_Y_Func_ ...

  3. JS——缓动动画

    核心思想: (1)相对于匀速移动,盒子每次移动的步长都是变化的,公式:盒子位置=盒子本身位置+(目标位置-盒子本身位置)/10 (2)在盒子位置与目标距离小于10px时,其步长必然是小数,又由于off ...

  4. CSS——display:flex

    Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 设为Flex布局以后,子元素的float.clear和vertical-align属性 ...

  5. 基于zk“临时顺序节点“的分布式锁

    import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.io.IOException; im ...

  6. linux mysql-workbench 创建与正式库表结构一样的表

    先在本地创建数据库 字符集选择这个 创建数据库成功 创建与正式库一样的表 step1: 连接正式库,找到要生成的表,导出创建表的sql语句 step2: 找到本地数据库,选择表,在sql执行区域复制s ...

  7. 码书:编码与解码的战争 PDF 下载

    码书:编码与解码的战争 PDF 下载 下载地址:https://pan.baidu.com/s/14Y_krHh-unOv4g2KYFFDgQ 如需分享码:[打开微信]->[扫描右侧二维码]-& ...

  8. c/c++排坑(4) -- c/c++中返回局部变量

    返回c语言中的局部变量 先看一段代码猜猜,打印值: #include <iostream> using namespace std; char * func(); int main() { ...

  9. 洛谷——P2814 家谱

    P2814 家谱 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. 输入输出格式 输入格式: 输入由多行组成,首先是一系列有关父子关系 ...

  10. 五、Scrapy中Item Pipeline的用法

    本文转载自以下链接: https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/item-pipeline.html https://doc.scra ...