HDU 2066 一个人的旅行
2012-09-08 20:32
281 查看
#include<iostream> using namespace std; const int INF=0x3fffffff; int map[1010][1010]; int used[1010]; int dis[1010]; void init() { int i,j; for(i=0;i<=1000;i++) { dis[i]=INF; for(j=0;j<=1000;j++) map[i][j]=INF; } memset(used,0,sizeof(used)); } void dijkstra(int n) { int minNode; int min; int i,j; //dis[start]=0; for(i=1;i<=n;i++) { min=INF; for(j=1;j<=n;j++) { if(!used[j] && dis[j]<min) { min=dis[j]; minNode=j; } } used[minNode]=1; for(j=1;j<=n;j++) if(!used[j] && dis[minNode] + map[minNode][j] < dis[j]) dis[j]=dis[minNode] + map[minNode][j]; } //return dis[end]; } main() { int t,s,d; int a,b,time; int sa,sb; int n,i; int min; int dest[1010]; while(scanf("%d%d%d",&t,&s,&d)!=EOF) { init(); n=-1; while(t--) { scanf("%d%d%d",&a,&b,&time); if(time<map[a][b])///////////坑人坑人,没有判断就wrong map[a][b]=map[b][a]=time; if(b>n) n=b; if(a>n) n=a; } while(s--) { scanf("%d",&sa); dis[sa]=0; //map[0][sa]=map[sa][0]=0; } i=0; sb=d; while(sb--) { scanf("%d",&dest[i++]); } min=INF; int k; dijkstra(n); for(i=0;i<d;i++) { if( dis[ dest[i] ]< min) min=dis[ dest[i] ]; } cout<<min<<endl; } }
相关文章推荐
- HDU 2066 一个人的旅行 spfa
- hdu 2066 一个人的旅行(迪杰斯特拉 && floyd)
- HDU 2066 一个人的旅行 (floyd)
- hdu-2066 一个人的旅行
- HDU 2066 一个人的旅行 <裸的迪杰斯特拉算法+虚拟顶点法>
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行(最短路径)
- HDU 2066 一个人的旅行(单源最短路SPFA)
- hdu 2066 一个人的旅行(最短路问题)
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行【Dijkstra 】
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- 一个人的旅行 hdu 2066
- HDU 2066-一个人的旅行(最短路Dijkstra)
- HDU 2066 一个人的旅行(spfa)
- HDU - 2066 一个人的旅行(dijkstra最短路)
- HDU 2066 一个人的旅行 (floyd算法)