HDOJ-2680-Choose the best route(最短路)
2015-08-18 09:01
483 查看
Choose the best route
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10394 Accepted Submission(s): 3353
[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
最短路问题,用Dij可写,注意此题意为有向图
#include<cstdio> #include<cstring> #define INF 0x3f3f3f3f #define max 1100 int N,M,map[max][max],end; void djstl(int star){ int dis[max],vis[max]; memset(dis,0x3f,sizeof(dis)); memset(vis,0,sizeof(vis)); for(int i=1;i<=N;i++){ dis[i]=map[star][i]; } dis[star]=0; vis[star]=1; while(1){ int k=1,min=INF; for(int i=1;i<=N;i++){ if(!vis[i]&&dis[i]<min){ min=dis[i]; k=i; } } if(min==INF) break; vis[k]=1; for(int i=1;i<=N;i++){ if(!vis[i]&&dis[i]>dis[k]+map[k][i]){ dis[i]=dis[k]+map[k][i]; } } } if(dis[end]!=INF) printf("%d\n",dis[end]); else puts("-1"); } int main(){ while(scanf("%d%d%d",&N,&M,&end)!=EOF){ int a,b,x; memset(map,0x3f,sizeof(map)); for(int m=0;m<M;m++){ scanf("%d%d%d",&a,&b,&x); if(map[a][b]>x){ map[a][b]=x;//此为有向图 } } int W,can[3000]; scanf("%d",&W); for(int w=1;w<=W;w++){ scanf("%d",&can[w]); } for(int w=1;w<=W;w++){ map[can[1]][can[w]]=0; } djstl(can[1]); } return 0; }
相关文章推荐
- Poj2638 网络流+最短路+二分答案
- Aizu1311 分层图最短路 (...大概)
- 单源最短路深度分析
- 最短路径问题迪杰斯特拉(Dijkstra)Android 测试
- hdu5137最短路
- Dijkstra求最短路与次短路
- 2014西安邀请赛部分题解
- 2014 西安邀请赛状压DP
- 2013长沙邀请赛Travel in time
- 最短路dij——POJ 2387 Til the Cows Come Home题解
- 带负权的最短路bellman_ford——POJ 3259 Wormholes题解
- hdu 2544 最短路(简单的Floyd)
- hdu 3790 最短路径问题 (dijkstra算法+memset()用法)
- poj 2253 Frogger(dijkstra)
- hdu 2544 最短路 (Bellman_Ford算法)
- hdu 2690 Choose the best route (bellman_ford)
- hdu 1596 find the safest road(spfa算法)
- [BZOJ1266][AHOI2006][最短路][最小割]上学路线
- 最短路(Dijstra) 畅通工程续
- 最短路(Dijstra) 一个人的旅行