zoukankan      html  css  js  c++  java
  • hdu 2544 最短路

    题目连接

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

    最短路

    Description

    在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

    Input

    输入包括多组数据。每组数据第一行是两个整数$N、M(N leq 100,M leq 10000)$,$N$表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为$N$的路口是赛场所在地,$M$则表示在成都有几条路。$N=M=0$表示输入结束。接下来$M$行,每行包括3个整数$A,B,C (1leq A,B leq N,1 leq C leq 1000)$,表示在路口$A$与路口$B$之间有一条路,我们的工作人员需要$C$分钟的时间走过这条路。

    Output

    输入保证至少存在1条商店到赛场的路线。

    Sample Input

    2 1
    1 2 3
    3 3
    1 2 5
    2 3 5
    3 1 2
    0 0

    Sample Output

    3
    2

     堆优化的dijkstra求最短路。。。

     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<vector>
     7 #include<queue>
     8 #include<map>
     9 using std::map;
    10 using std::cin;
    11 using std::cout;
    12 using std::endl;
    13 using std::find;
    14 using std::sort;
    15 using std::pair;
    16 using std::vector;
    17 using std::multimap;
    18 using std::priority_queue;
    19 #define pb(e) push_back(e)
    20 #define sz(c) (int)(c).size()
    21 #define mp(a, b) make_pair(a, b)
    22 #define all(c) (c).begin(), (c).end()
    23 #define iter(c) decltype((c).begin())
    24 #define cls(arr,val) memset(arr,val,sizeof(arr))
    25 #define cpresent(c, e) (find(all(c), (e)) != (c).end())
    26 #define rep(i, n) for (int i = 0; i < (int)(n); i++)
    27 #define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)
    28 const int N = 11000;
    29 typedef unsigned long long ull;
    30 struct P {
    31     int w, v;
    32     P(int i = 0, int j = 0) :w(i), v(j) {}
    33     inline bool operator<(const P &a) const {
    34         return w > a.w;
    35     }
    36 };
    37 struct Node { int to, w, next; };
    38 int n, m;
    39 struct Dijkstra {
    40     Node G[N];
    41     int tot, dist[N], head[N];
    42     inline void init() {
    43         tot = 0;
    44         cls(head, -1), cls(dist, 0x3f);
    45     }
    46     inline void add_edge(int u, int v, int w) {
    47         G[tot] = { v, w, head[u] }; head[u] = tot++;
    48     }
    49     inline void built(int m) {
    50         int u, v, w;
    51         rep(i, m) {
    52             scanf("%d %d %d", &u, &v, &w);
    53             add_edge(u, v, w), add_edge(v, u, w);
    54         }
    55     }
    56     inline void dijkstra(int s) {
    57         dist[s] = 0;
    58         priority_queue<P> q;
    59         q.push(P(0, s));
    60         while (!q.empty()) {
    61             P t = q.top(); q.pop();
    62             int u = t.v;
    63             if (dist[u] < t.w) continue;
    64             for (int i = head[u]; ~i; i = G[i].next) {
    65                 int &w = dist[G[i].to];
    66                 if (w > dist[u] + G[i].w) {
    67                     w = dist[u] + G[i].w;
    68                     q.push(P(w, G[i].to));
    69                 }
    70             }
    71         }
    72         printf("%d
    ", dist[n]);
    73     }
    74 }go;
    75 int main() {
    76 #ifdef LOCAL
    77     freopen("in.txt", "r", stdin);
    78     freopen("out.txt", "w+", stdout);
    79 #endif
    80     while (~scanf("%d %d", &n, &m), n + m) {
    81         go.init();
    82         go.built(m);
    83         go.dijkstra(1);
    84     }
    85     return 0;
    86 }
    View Code
    By: GadyPu 博客地址:http://www.cnblogs.com/GadyPu/ 转载请说明
  • 相关阅读:
    番外篇 之 JS调用
    C# 匿名方法及Lambda表达式
    番外篇 之 C#委托
    番外篇之多线程
    23----2013.07.01---Div和Span区别,Css常用属性,选择器,使用css的方式,脱离文档流,div+css布局,盒子模型,框架,js基本介绍
    22----2013.06.29---HTML--html介绍.超链接和图片,表格,表单,表单标签,meta,复习当天内容
    AccessHelper类
    WPF视频教程系列笔记
    《深入浅出WPF》 学习笔记
    基于MAVEN构建Spring MVC初始化配置
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4646430.html
Copyright © 2011-2022 走看看