hdu2680Choose the best route(最短路Dijkstra)
2014-11-28 07:08
253 查看
Choose the best route
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7458 Accepted Submission(s): 2448
[align=left]Problem Description[/align]
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.
[align=left]Input[/align]
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.
[align=left]Output[/align]
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”.
[align=left]Sample Input[/align]
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
[align=left]Sample Output[/align]
1 -1#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; int map[1001][1001],dis[20001],vis[1001]; #define N 1001 #define maxn 1000000 void dj() { int i,j; for(i=1;i<=N;i++) { dis[i]=map[0][i]; vis[i]=0; } for(i=1;i<=N;i++) { int t=maxn; int k; for(j=1;j<=N;j++) { if(!vis[j]&&dis[j]<t) { t=dis[j]; k=j; } } vis[k]=1; for(j=1;j<=N;j++) { if(!vis[j]&&dis[k]+map[k][j]<dis[j]) dis[j]=dis[k]+map[k][j]; } } //printf("%d\n",dis ); } int main() { int n,m,s,i,j; while(scanf("%d%d%d",&n,&m,&s)!=EOF) { int p,q,t,w,a; for(i=0;i<=N;i++) { for(j=0;j<=N;j++) { if(i==j) map[i][j]=0;//初始化地图 ,道路是单向的 else map[i][j]=maxn; } } for(i=0;i<m;i++) { scanf("%d%d%d",&p,&q,&t); if(t<map[p][q]) map[p][q]=t; } scanf("%d",&w); for(i=0;i<w;i++) { scanf("%d",&a); map[0][a]=0; } dj(); if(dis[s]==maxn) printf("-1\n"); else printf("%d\n",dis[s]); } return 0; }
相关文章推荐
- Dijkstra 模板 最短路
- hdu2544 最短路 dijkstra的使用优先队列优化的比较
- POJ--2449--Remmarguts' Date【dijkstra_heap+A*】第K短路
- 昂贵的聘礼 最短路 dijkstra
- 两点之间所有的最短路的算法(Multi-Dijkstra-shortest paths)
- 2017 第十场多校训练 HDU 6181 Two Paths 次短路+Dijkstra
- I - Harry Potter and the Final Battle HDU - 3986 最短路加重边,dijkstra的邻接表实现
- HDU 2066-一个人的旅行(最短路Dijkstra)
- POJ 3013 Big Christmas Tree【最短路变形,DIjkstra堆优化+spfa算法】
- [bzoj1975][Sdoi2010]魔法猪学院 k短路 dijkstra
- hdu_2544_路口最短距离_最短路_dijkstra
- dijkstra求最短路并记录路径
- 【最短路+dijkstra+floyd+spfa】1596 find the safest road
- 最短路 (dijkstra)
- hdu 2544 最短路 Dijkstra
- 林中漫步,白书P330Uva10917(dijkstra求最短路,动态规划)
- POJ 2263 Heavy Cargo 最短路dijkstra
- POJ 3767 I Wanna Go Home【最短路,Dijkstra+spfa,题意是关键呀】
- HDU 2544 最短路 dijkstra
- 最短路-dijkstra与floyd的邻接矩阵模板示例