zoukankan      html  css  js  c++  java
  • 堆优化的dij【模板】

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<queue>
     5 using namespace std;
     6 int head[1000005],n, m, cnt, ccnt;
     7 long long dist[1000005],ans;
     8 struct pot {
     9     int id;
    10     int val;
    11     bool operator<(const struct pot&aa)const {
    12         return val > aa.val;
    13     }
    14 };
    15 struct edge {
    16     int fr;
    17     int to;
    18     long long  v;
    19     int next;
    20 }e[1000005];
    21 void INIT() {
    22     memset(head, -1, sizeof(head));
    23     memset(dist, 0x3f3f3f3f, sizeof(dist));
    24     dist[1] = 0;
    25     cnt=0;
    26     ans = 0;
    27 }
    28 void adde(int xx, int yy,long long zz) {
    29     e[cnt].fr = xx;
    30     e[cnt].to = yy;
    31     e[cnt].v = zz;
    32     e[cnt].next = head[xx];
    33     head[xx] = cnt++;
    34 }
    35 void dij() {
    36     priority_queue<struct pot>pq;
    37     struct pot sta;
    38     sta.id = 1;
    39     sta.val = 0;
    40     pq.push(sta);
    41     while (!pq.empty()) {
    42         struct pot aa = pq.top(); pq.pop();
    43         if (dist[aa.id] < aa.val)continue;
    44         for (int i = head[aa.id]; i != -1; i = e[i].next) {
    45             if (dist[e[i].to] > dist[aa.id] + e[i].v) {
    46                 dist[e[i].to] = dist[aa.id] + e[i].v;
    47                 struct pot cc;
    48                 cc.id = e[i].to;
    49                 cc.val = dist[e[i].to];
    50                 pq.push(cc);
    51             }
    52         }
    53     }
    54 }
    55 int main() {
    56     int t;
    57     scanf("%d",&t);
    58     while (t--) {
    59         INIT();
    60         scanf("%d%d", &n, &m);
    61         while (m--) {
    62             int x, y;
    63             long long z;
    64             scanf("%d%d%lld", &x, &y, &z);
    65             adde(x, y, z);
    66         }
    67         dij();
    68     }
    69     return 0;
    70 }
  • 相关阅读:
    Git合并
    Git对象
    Git储藏和引用日志
    小小c#算法题 4 子数组最大和
    小小c#算法题 2 求素数
    小小c#算法题 5 插入排序
    小小c#算法题 1 找出数组中满足条件的两个数
    [转] WPF – Editing Mode with Save and Cancel Capability
    小小c#算法题 0 单循环冒泡排序
    小小c#算法题 3 字符串语句反转
  • 原文地址:https://www.cnblogs.com/MekakuCityActor/p/8987593.html
Copyright © 2011-2022 走看看