ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一个人的旅行 HDU-2066 (SPFA)

2020-05-09 11:58:35  阅读:243  来源: 互联网

标签:HDU 草儿 int tot SPFA edge que include 2066


http://acm.hdu.edu.cn/showproblem.php?pid=2066

Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。   Input 输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;
接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)
接着的第T+1行有S个数,表示和草儿家相连的城市;
接着的第T+2行有D个数,表示草儿想去地方。   Output 输出草儿能去某个喜欢的城市的最短时间。   Sample Input 6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10   Sample Output 9  
  1 #include <iostream>
  2 #include <algorithm>
  3 #include <cstdio>
  4 #include <cstring>
  5 #include <queue>
  6 #include <stack>
  7 #include <vector>
  8 
  9 const int inf = 0x3f3f3f3f;
 10 
 11 using namespace std;
 12 
 13 struct node
 14 {
 15     int v, w, next;
 16 }edge[1000005];
 17 
 18 int head[1005], dis[1005], num[1005], tot;
 19 bool vis[1005];
 20 
 21 void add(int u, int v, int w)
 22 {
 23     tot++;
 24     edge[tot].v = v;
 25     edge[tot].w = w;
 26     edge[tot].next = head[u];
 27     head[u] = tot;
 28 }
 29 
 30 void init(int s)
 31 {
 32     for(int i=0;i<=1002;i++)
 33     {
 34         //num[i] = 0;
 35         dis[i] = inf;
 36         vis[i] = false;
 37     }
 38     dis[s] = 0;
 39 }
 40 
 41 bool spfa(int s, int t)
 42 {
 43     init(s);
 44     queue <int> que; ///队列
 45     que.push(s);
 46     vis[s] = 1;
 47     //num[s]++;
 48     while(!que.empty())
 49     {
 50         int cur = que.front();
 51         que.pop();
 52         vis[cur] = 0;
 53         for(int i=head[cur];i;i=edge[i].next)
 54         {
 55             int v = edge[i].v;
 56             if(dis[v]>dis[cur]+edge[i].w)
 57             {
 58                 dis[v] = dis[cur] + edge[i].w;
 59                 if(!vis[v])
 60                 {
 61                     que.push(v);
 62                     vis[v] = true;
 63                     //num[v]++;
 64                     //if(num[v] > t) return false; ///超过总边数,存在负环,(当然,这道题不存在这种情况,不写也可)
 65                 }
 66             }
 67         }
 68     }
 69     return true;
 70 }
 71 
 72 int main()
 73 {
 74     int t, s, d;
 75     int city[1005], like[1005];
 76     while(~scanf("%d %d %d", &t, &s, &d))
 77     {
 78         tot = 0;
 79         while(t--)
 80         {
 81             int u, v, w;
 82             scanf("%d %d %d", &u, &v, &w);
 83             add(u, v, w);
 84             add(v, u, w);
 85         }
 86         for(int i=0;i<s;i++)
 87         {
 88             scanf("%d", &city[i]);
 89         }
 90         for(int i=0;i<d;i++)
 91         {
 92             scanf("%d", &like[i]);
 93         }
 94         int minn = inf;
 95         for(int i=0;i<s;i++)
 96         {
 97             spfa(city[i], t);
 98             for(int j=0;j<d;j++)
 99             {
100                 minn = min(minn, dis[like[j]]);
101             }
102         }
103         printf("%d\n", minn);
104     }
105 
106     return 0;
107 }

 

标签:HDU,草儿,int,tot,SPFA,edge,que,include,2066
来源: https://www.cnblogs.com/0xiaoyu/p/12856328.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有