标签:des style blog http color io os ar java
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7361 Accepted Submission(s): 2408
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<stdlib.h> #include<algorithm> using namespace std; const int MAXN=1000+5; const int INF=0x3f3f3f3f; int d[MAXN],w[MAXN][MAXN],vis[MAXN]; int n,m,s,en,num,in; void dijkstra(int start) { memset(vis,0,sizeof(vis)); for(int i=0;i<=n;i++) d[i]=INF; d[start]=0; for(int i=0;i<=n;i++) { int temp=INF,x; for(int j=0;j<=n;j++) { if(!vis[j] && d[j]<temp) { x=j; temp=d[j]; } } vis[x]=1; for(int j=0;j<=n;j++) if(d[x]+w[x][j]<d[j]) d[j]=d[x]+w[x][j]; } } int main() { while(scanf("%d %d %d",&n,&m,&s)!=EOF) { for(int i=0;i<=n;i++) //这里要注意,加入超级源点之后,这个点也要放到图中去 for(int j=0;j<=n;j++) { if(i==j) w[i][j]=0; else w[i][j]=INF; } for(int i=1;i<=m;i++) { int star,en,val; scanf("%d %d %d",&star,&en,&val); if(val<w[star][en]) //防止重边,如果出现重边的情况,选时间最短的边 w[star][en]=val; } scanf("%d",&num); for(int i=1;i<=num;i++) { scanf("%d",&in); w[0][in]=0; //加入一个超级源点 } dijkstra(0); if(d[s]==INF) printf("-1\n"); else printf("%d\n",d[s]); } return 0; }
还有一种思路是利用反向图,这样利用一次dijkstra再找出最小值就行了。
HDU 2680 Choose the best route (最短路)
标签:des style blog http color io os ar java
原文地址:http://www.cnblogs.com/clliff/p/4034920.html