HDU 2066最短路径Dijkstra、

思路:枚举所有起点城市然后比较每个起点所去喜欢城市的最小距离

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 const int qq=1000+10;
 5 const int MAX=1e7;
 6 int s[qq],e[qq];
 7 int dist[qq];
 8 int vis[qq],tar[qq];
 9 int city[qq][qq];
10 int t,a,b;
11 void Dijkstra()
12 {
13     int poor=MAX;
14     for(int l=1;l<=a;++l){
15         int tot=MAX;
16         for(int i=1;i<qq;++i){
17             vis[i]=0;
18             dist[i]=city[s[l]][i];
19         }
20         vis[s[l]]=1;
21         for(int i=1;i<qq;++i){
22             int minx=MAX;
23             int u=s[l];
24             for(int j=1;j<qq;++j)
25                 if(!vis[j] && dist[j] < minx)
26                     minx=dist[u=j];
27             if(minx==MAX)    break;
28             vis[u]=1;
29             if(tar[u]!=0){
30                 tot=dist[u];
31                 break;
32             }
33             for(int j=1;j<qq;++j)
34                 if(!vis[j] && city[u][j] < MAX)
35                     if(dist[u]+city[u][j]<dist[j])
36                         dist[j] = dist[u] + city[u][j];
37         }
38         if(tot<poor)
39             poor=tot;
40     }
41     printf("%d\n",poor);
42 }
43 int main()
44 {
45     while(scanf("%d %d %d",&t,&a,&b)!=EOF){
46         for(int j,i=1;i<qq;++i)
47             for(j=1;j<qq;++j)
48                 city[i][j]=MAX;
49         for(int i=1;i<=t;++i){
50             int x,y,cost;
51             scanf("%d %d %d",&x,&y,&cost);
52             if(cost<city[x][y])
53                 city[x][y]=city[y][x]=cost;
54         }
55         for(int i=1;i<=a;++i)
56             scanf("%d",&s[i]);
57         memset(tar,0,sizeof(tar));
58         for(int i=1;i<=b;++i){
59             int ans;scanf("%d",&ans);
60             tar[ans]=1;
61         }
62         Dijkstra();
63     }
64 }
时间: 2024-10-18 16:33:41

HDU 2066最短路径Dijkstra、的相关文章

hdu 2066 一个人的旅行 最短路径

一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18399    Accepted Submission(s): 6394 Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰

hdu 2680 最短路径(dijkstra算法+多源最短路径单源化求最小值)

Choose the best route Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7062    Accepted Submission(s): 2301 Problem Description One day , Kiki wants to visit one of her friends. As she is liable

ACM: HDU 3790 最短路径问题-Dijkstra算法

HDU 3790 最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p.最后一行是

hdu 2066 一个人的旅行(裸dijkstra)

http://acm.hdu.edu.cn/showproblem.php?pid=2066 求多源多汇的最短路,n最大为1000,floyd三重循环会超时.继续dijkstra吧. #include <stdio.h> #include <algorithm> #include <set> #include <map> #include <vector> #include <math.h> #include <string.h

hdu 2066 一个人的旅行(Dijkstra)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景--草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女--眼看寒假就快到了,这么一大段

hdu 3790 最短路径问题(双重权值,dijkstra算法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费!!! (2)更新路径的时候要注意更新花费. 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 const int INF=9999999; 5 int map[1010][1010],Min,n,co

HDU 3790 最短路径问题(SPFA || Dijkstra )

题目链接 题意 : 中文题不详述. 思路 :无论是SPFA还是Dijkstra都在更新最短路的那个地方直接将花费更新了就行,还有别忘了判重边,话说因为忘了判重边WA了一次. 1 //3790 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 const int INF = 1 <

hdu 3790 最短路径问题(dijkstra)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p.最后一行是两个数 s,t;起点s,终点.n和m为0时输入结束. (1<n<

hdu 2066

??.(790684394) 17:34:42#include <stdio.h>#define N 2000#define INF 100000000int g[N][N],bz[N],dist[N],s,t,n,z;void Dijkstra(int s){ int i,j,min,k,x; for (i=1;i<=n;i++) { dist[i]=g[s][i]; bz[i]=0; } bz[s]=1; for (i=1;i<n;i++) { j=s; min=INF; fo