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. Oracle 递归的写法(start with) 以及where条件作用域

    先转一个讲Oracle递归讲得非常透彻的文章: http://blog.csdn.net/weiwenhp/article/details/8218091 前言:嗯,这也是一个前人挖坑,后人来填的故事 ...

  2. J2EE集群原理(摘录)

    J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念:“负载均衡”(load balancing)和“失效备援”(failover)  图一:负载均衡 多个客户端同时发出请求,位于前端的负载均衡 ...

  3. P1538 迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  4. Skeleton Screen — 骨架屏

    用户体验一直是前端开发需要考虑的重要部分,在数据请求时常见到锁屏的loading动画,而现在越来越多的产品倾向于使用Skeleton Screen Loading(骨架屏)替代,以优化用户体验. Sk ...

  5. Android sensor 系统框架 (二)

    连载上一篇http://www.cnblogs.com/hackfun/p/7327320.html (D) 如何加载访问.so库 在前一篇博客http://www.cnblogs.com/hackf ...

  6. AIDL跨进程通信报Intent must be explicit

    在Android5.0机子上采用隐式启动来调试AIDL时,会出现Intent must be explicit的错误,原因是5.0的机子不允许使用隐式启动方式,解决的方法是:在启动intent时添加i ...

  7. Android基础TOP2_1:输出系统时间

    Activity: <TextView android:id="@+id/tv" android:layout_width="wrap_content" ...

  8. MySQL主从备份配置

    MySQL主从热备配置 两台服务器的MySQL版本都是5.5.41master:192.168.3.119slave:192.168.3.120 MySQL主服务器配置:1.创建用于备份的用户 gra ...

  9. 12--c完数/最大公约数/最小公倍数/素数/回文数

    完数/最大公约数/最小公倍数/素数/回文数 2015-04-08 10:33 296人阅读 评论(0) 收藏 举报  分类: C/C++(60)  哈尔滨工业大学(8)  版权声明:本文为博主原创文章 ...

  10. Java数值数学类

    Java数值数学类 序号 方法与描述 1 xxxValue()  将 Number 对象转换为xxx数据类型的值并返回. 2 compareTo()  将number对象与参数比较. 3 equals ...