• hdu 2066 一个人的旅行 (dij+heap)


    Problem - 2066

      入门SP,用dij+heap 0ms通过。

    View Code
     1 #define REP(i, n) for (int i = 0; i < (n); i++)
     2 #define REP_1(i, n) for (int i = 1; i <= (n); i++)
     3 typedef pair<LL, int> PLI;
     4 #define PB push_back
     5 #define MPR make_pair
     6 #define FI first
     7 #define SE second
     8 
     9 VPII rel[N];
    10 LL dis[N];
    11 multiset<PLI> HP;
    12 
    13 void input(int n, int s, int t) {
    14     REP(i, 1002) rel[i].clear(), dis[i] = linf;
    15     HP.clear();
    16     int a, b, d;
    17     REP(i, n) {
    18         scanf("%d%d%d", &a, &b, &d);
    19         rel[a].PB(MPR(b, d));
    20         rel[b].PB(MPR(a, d));
    21     }
    22     REP(i, s) {
    23         scanf("%d", &a);
    24         rel[0].PB(MPR(a, 0));
    25     }
    26     REP(i, t) {
    27         scanf("%d", &a);
    28         rel[a].PB(MPR(1001, 0));
    29     }
    30 //    puts("OK!");
    31 }
    32 
    33 LL dijHeap(int s, int t) {
    34     dis[s] = 0ll;
    35     HP.insert(MPR(0ll, s));
    36     while (true) {
    37         int id = HP.begin()->SE;
    38 //        cout << "size " << SZ(HP) << endl;
    39 //        cout << id << ' ' << HP.begin()->FI << ' ' << dis[id] << endl;
    40         if (id == t) return HP.begin()->FI;
    41         HP.erase(HP.begin());
    42         REP(i, SZ(rel[id])) {
    43             int x = rel[id][i].FI, d = rel[id][i].SE;
    44             if (dis[x] > dis[id] + d) {
    45 //                cout << x << ' ' << dis[x] << endl;
    46                 if (dis[x] != linf) HP.erase(MPR(dis[x], x));
    47                 HP.insert(MPR(dis[x] = dis[id] + d, x));
    48             }
    49         }
    50     }
    51 }
    52 
    53 int main() {
    54 //    freopen("in", "r", stdin);
    55     int n, s, t;
    56     while (~scanf("%d%d%d", &n, &s, &t)) {
    57         input(n, s, t);
    58         cout << dijHeap(0, 1001) << endl;
    59     }
    60     return 0;
    61 }

    ——written by Lyon

  • 相关阅读:
    maven学习(二)
    maven学习(一)
    一步步点亮led之软硬件分析
    mkv210添加校验和
    led部分Makefile
    makefile
    交叉编译工具链
    基础知识
    C语言复杂表达式与指针应用
    指针
  • 原文地址:https://www.cnblogs.com/LyonLys/p/hdu_2066_Lyon.html
Copyright © 2020-2023  润新知