hdu 2066 一个人的旅行
2014-08-16 11:45
337 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066
题目大意:这是一个不同于其他最短路模板的题目,他特别的地方是起点不同,起点有不同个,来求到达终点的最短路。注意时间问题,以防超时~~
题目大意:这是一个不同于其他最短路模板的题目,他特别的地方是起点不同,起点有不同个,来求到达终点的最短路。注意时间问题,以防超时~~
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <cmath> using namespace std; int n,Min,MM,map[1010][1010],d,node[1010],p[1010],q[1010]; const int INF=999999; void set () { for (int i=1; i<1010; i++) { node[i]=INF; for (int j=1; j<1010; j++) map[i][j]=INF; } } int dijkstra(int m) { int vis[1010]= {0}; int tm=m; vis[m]=1; node[m]=0; for (int k=2; k<=n; k++) { Min=INF; for (int i=1; i<=n; i++) if (!vis[i]) { if (node[i]>map[tm][i]+node[tm]) node[i]=map[tm][i]+node[tm]; if (Min>node[i]) { Min=node[i]; m=i; } } vis[m]=1; tm=m; for (int j=1; j<=d; j++) if (q[j]==tm) return Min; } return -1; } int main () { int T,s; while (~scanf("%d%d%d",&T,&s,&d)) { //cout<<d<<endl; set(); n=0; //cout<<d<<endl; while (T--) { int a,b,t; scanf("%d%d%d",&a,&b,&t); //cout<<1<<endl; if (a>n) n=a; else if (b>n) n=b; if (map[a][b]>t) map[a][b]=map[b][a]=t; } for (int i=1; i<=s; i++) scanf("%d",&p[i]); for (int j=1; j<=d; j++) scanf("%d",&q[j]); MM=INF; for (int i=1; i<=s; i++) { int w=dijkstra(p[i]); if (MM>w&&w!=-1) MM=w; } printf ("%d\n",MM); } return 0; }
相关文章推荐
- HDU 2066 一个人的旅行(最短路)
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行 (dijstra bellman-ford flyod SPFA)
- HDU 2066 一个人的旅行.
- 【hdu 2066】 一个人的旅行 ( 最短路 Dijkstra)
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu-2066-一个人的旅行(dijkstra)
- HDU 2066一个人的旅行(dijk最短路)
- Hdu-2066 一个人的旅行
- 一个人的旅行 HDU 2066 &&HDU Today HDU 2112
- HDU - 2066 一个人的旅行(最短路径)(模板)
- hdu 2066 一个人的旅行
- ACM->dijkstra + heap + stl 一个人的旅行 hdu 2066
- HDU 2066 一个人的旅行
- Hdu 2066 一个人的旅行
- Hdu 2066 一个人的旅行(dijkstra算法)
- hdu 2066 一个人的旅行 优化的Floyd算法解决
- hdu 2066 一个人的 旅行