一个人的旅行 hdu 2066
2014-10-19 20:16
204 查看
/**************** * Author:fisty * Data:2014-10-19 * hdu 2066 * 最短路 ***************/ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define MAX_N 1111 #define INF 0x3f3f3f3f int T,S,D; int map[MAX_N][MAX_N]; int d[MAX_N]; bool used[MAX_N]; int start[MAX_N],end[MAX_N]; int n; int dijkstra(int s){ fill(d, d + MAX_N, INF); fill(used, used + MAX_N, false); d[s] = 0; while(true){ int v = -1; for(int u = 0;u <= n; u++){ if(!used[u] && (v == -1 || d[u] < d[v])) v = u; } if(v == -1) break; used[v] = true; for(int u = 0;u <= n; u++){ d[u] = min(d[u] , d[v] + map[v][u]); } } int ans = INF; for(int i = 0;i < D; i++) ans = min(ans, d[end[i]]); return ans; } int main(){ int u,v,t; while(scanf("%d%d%d", &T, &S, &D) != EOF){ for(int i = 0;i < 1111;i++){ for(int j = 0;j < 1111; j++){ map[i][j] = INF; } map[i][i] = 0; } n = 0; for(int i = 0;i < T; i++){ scanf("%d%d%d", &u, &v, &t); n = max(max(u, n), v); map[u][v] = map[v][u] = min(map[u][v],t); } for(int i = 0;i < S; i++){ scanf("%d", &start[i]); map[0][start[i]] = map[start[i]][0] = min(map[0][start[i]], 0); } for(int i = D-1;i >= 0; i--){ scanf("%d", &end[i]); } int ans = dijkstra(0); printf("%d\n", ans); } return 0; }
相关文章推荐
- HDU 2066 一个人的旅行 (Dijkstra算法)
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行(Dijkstra求最短路问题)
- HDU 2066--一个人的旅行【Dijkstra】
- HDU 2066 一个人的旅行 (单源最短路)
- HDU2066 一个人的旅行(dijkstra算法)
- HDU 2066 一个人的旅行(Dijkstra)
- Hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行 - from lanshui_Yang
- hdu 2066 一个人的旅行(dijkstra 多个起点和终点)
- hdu 2066 一个人的旅行(SPFA算法)
- HDU---2066-一个人的旅行(最短路)
- 一个人的旅行(http://acm.hdu.edu.cn/showproblem.php?pid=2066)SPFA||dijkstra
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行(最短路)
- hdu-2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行(最短路)
- HDU 2066 一个人的旅行