首页 > 其他 > 详细

hdu 2680 (Dijkstra)

时间:2014-06-15 13:15:20      阅读:440      评论:0      收藏:0      [点我收藏+]

快放暑假了,训练又要开始了。先从熟悉的图论开始做吧。

题意:一张有向图中有若干起点一个终点,让你算最短路,方法很简单只需人为加一个起点指向所有起点让后距离为0即可。

代码如下:

bubuko.com,布布扣
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 #include <set>
 5 #include <iostream>
 6 #include <queue>
 7 #include <map>
 8 #include <math.h>
 9 #include <string>
10 #define MP(a, b) make_pair(a, b)
11 #define PB(a) push_back(a)
12 using namespace std;
13 
14 typedef pair<int, int> pii;
15 const int LEN = 1010;
16 const int INF = 0x3f3f3f3f;
17 vector<pii> Map[LEN];
18 int n, m, dis[LEN];
19 
20 void Dijkstra(int vex){
21     int vis[LEN] = {0};
22     priority_queue<pii, vector<pii>, greater<pii> > q;
23     for(int i=0; i<=n; i++) dis[i] = INF;
24     dis[vex] = 0;
25     q.push(MP(dis[vex], vex));
26     while(!q.empty()){
27         pii nvex = q.top(); q.pop();
28         int nv = nvex.second;
29         if(vis[nv]) continue;
30         vis[nv] = 1;
31         for(int i=0; i<Map[nv].size(); i++){
32             int x = Map[nv][i].first, y = Map[nv][i].second;
33             if(dis[x] > dis[nv] + y){
34                 dis[x] = dis[nv] + y;
35                 q.push(MP(dis[x], x));
36             }    
37         }
38     }
39 }
40 
41 int main()
42 {
43 //    freopen("in.txt", "r", stdin);
44 
45     int a, b, c, tn, s, e;
46     while(scanf("%d%d%d", &n, &m, &e)!=EOF){
47         for(int i=0; i<LEN; i++) Map[i].clear();
48         for(int i=0; i<m; i++){
49             scanf("%d%d%d", &a, &b, &c);
50             Map[a].PB(MP(b, c));
51         }
52         scanf("%d", &tn);
53         for(int i=0; i<tn; i++){
54             scanf("%d", &s);
55             Map[0].PB(MP(s, 0));
56         }
57         Dijkstra(0);
58         if(dis[e] != INF) printf("%d\n", dis[e]);
59         else puts("-1");
60     }
61     return 0;
62 }
View Code

 

hdu 2680 (Dijkstra),布布扣,bubuko.com

hdu 2680 (Dijkstra)

原文:http://www.cnblogs.com/shu-xiaohao/p/3789222.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!