Choose the best route HDU杭电2680【dijkstra算法 || SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=2680
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.
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.
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
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】的更多相关文章
- 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)
今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...
- 一个人的旅行 HDU杭电2066【dijkstra算法 || SPFA】
pid=2066">http://acm.hdu.edu.cn/showproblem.php? pid=2066 Problem Description 尽管草儿是个路痴(就是在杭电 ...
- 『ACM C++』HDU杭电OJ | 1418 - 抱歉 (拓扑学:多面体欧拉定理引申)
呕,大一下学期的第一周结束啦,一周过的挺快也挺多出乎意料的事情的~ 随之而来各种各样的任务也来了,嘛毕竟是大学嘛,有点上进心的人多多少少都会接到不少任务的,忙也正常啦~端正心态 开心面对就好啦~ 今天 ...
- 畅通project续HDU杭电1874【dijkstra算法 || SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多 ...
- ACM: HDU 3790 最短路径问题-Dijkstra算法
HDU 3790 最短路径问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- HDU Today HDU杭电2112【Dijkstra || SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=2112 Problem Description 经过锦囊相助,海东集团最终度过了危机,从此.HDU的发展就一直顺风 ...
- find the safest road HDU杭电1596【Dijkstra || SPFA】
pid=1596">http://acm.hdu.edu.cn/showproblem.php?pid=1596 Problem Description XX星球有非常多城市,每一个城 ...
- 升级降级(期望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级升级 ...
随机推荐
- 用CSS样式写选择框右侧小三角
直接上代码! <!DOCTYPE html><html lang="en"><head> <title>小三角</title& ...
- 【MySQL】二进制分发安装
操作系统:Red Hat Enterprise Linux Server release 6.5 Mysql安装包:mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz ...
- [Windows Server 2012] MySQL安全加固
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:MySQL ...
- 一款批量linux管理工具batchshell
BatchShell是什么? BatchShell是一款基于SSH2的批量文件传输及命令执行工具,它可以同时传输文件到多台远程服务器以及同时对多台远程服务器执行命令.BatchShell基于原生的sh ...
- 转:LINQ教程一:LINQ简介
原文地址:https://www.cnblogs.com/dotnet261010/p/8278793.html 一.为什么要使用LINQ 要理解为什么使用LINQ,先来看下面一个例子.假设有一个整数 ...
- Day 13 进程和线程
进程和线程 今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务 ...
- HDU - 1087 Super Jumping!Jumping!Jumping!(dp求最长上升子序列的和)
传送门:HDU_1087 题意:现在要玩一个跳棋类游戏,有棋盘和棋子.从棋子st开始,跳到棋子en结束.跳动棋子的规则是下一个落脚的棋子的号码必须要大于当前棋子的号码.st的号是所有棋子中最小的,en ...
- Nginx反向代理WebSocket(WSS)
1. WebSocket协议 WebSocket 协议提供了一种创建支持客户端和服务端实时双向通信Web应用程序的方法.作为HTML5规范的一部分,WebSockets简化了开发Web实时通信程序的难 ...
- zk strom 本地环境启动命令
bin/zkServer.sh statusbin/zkServer.sh startbin/storm nimbus &bin/storm ui &bin/storm drpc &a ...
- 如何在Ubuntu16.04 中安装Linux, Nginx, MySQL, PHP (LEMP 栈)
介绍 LEMP 栈是用来开发动态网页和web 应用程序的一系列软件集合,LEMP描述的是Linux操作系统,Nginx web 服务器,以及后端数据存储MySQL/MariaDB数据库和服务器端动态脚 ...