HDU 2066 一个人的旅行
2012-05-13 22:57
281 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2066
裸最短路,一开始又sb了,处理错复杂度TLE,囧
View Code
裸最短路,一开始又sb了,处理错复杂度TLE,囧
View Code
#include <stdio.h> #include <string.h> const int INF=1000000001; const int maxn=1001; int G[maxn][maxn]; int dis[maxn]; int vis[maxn]; int node1[maxn],node2[maxn]; int n; void Dijkstra(int s) { memset(vis,0,sizeof(vis)); for(int i=0;i<=n;i++) dis[i]=INF; dis[s]=0; for(int i=0;i<n;i++) { int ans=INF,u; for(int j=1;j<=n;j++) if(!vis[j] && dis[j]<ans) { ans=dis[j]; u=j; } vis[u]=1; for(int j=1;j<=n;j++) if(!vis[j] && G[u][j]+dis[u]<dis[j]) dis[j]=G[u][j]+dis[u]; } } int main() { int T,S,D; while(~scanf("%d%d%d",&T,&S,&D)) { int a,b,time; for(int i=0;i<1001;i++) for(int j=0;j<1001;j++) G[i][j]=INF; n=0; while(T--) { scanf("%d%d%d",&a,&b,&time); if(G[a][b]>time) G[a][b]=G[b][a]=time; if(n<a)n=a; if(n<b)n=b; } for(int i=1;i<=S;i++) scanf("%d",&node1[i]); for(int i=1;i<=D;i++) scanf("%d",&node2[i]); int ans=INF; for(int i=1;i<=S;i++) { Dijkstra(node1[i]); int minn=INF; for(int j=1;j<=D;j++) if(dis[node2[j]]<minn)minn=dis[node2[j]]; if(ans>minn)ans=minn; } printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU 2066 一个人的旅行 - from lanshui_Yang
- HDU-2066-一个人的旅行(最短路,dijkstra)
- HDOJ 2066 HDU 2066 一个人的旅行 ACM 2066 IN HDU
- 【HDU - 2066 一个人的旅行】 最短路 dijkstra,spfa
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行 【floyd】
- hdu-2066-一个人的旅行
- HDU 2066 一个人的旅行(Dijkstra模板题)
- HDU-2066 一个人的旅行(图论,Floyd ,最短路)
- hdu 2066 一个人的旅行【Dijkstra】解法
- hdu 2066 一个人的旅行(dijkstra)
- HDU-2066 一个人的旅行 最短路
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行 dijkstra&&spfa
- HDU 2066 一个人的旅行
- hdu - 2066 一个人的旅行(基础最短路)
- hdu 2066 一个人的旅行(Dijkstra求最短路问题)
- hdu 2066 一个人的旅行 最短路 dijkstra 解题报告
- HDU 2066 一个人的旅行(spfa)
- hdu 2066 一个人的旅行