zoukankan      html  css  js  c++  java
  • Dijkstra模板

     1 #include <bits/stdc++.h> 
     2 #define For(i,j,k) for(int i=j;i<=k;i++)
     3 #define Dow(i,j,k) for(int i=j;i>=k;i--)
     4 #define LL long long
     5 using namespace std ;
     6 inline int read() {
     7     int x = 0, f = 1;
     8     char ch = getchar();
     9     while(ch<'0'||ch>'9') { if(ch=='-') f = -1; ch = getchar(); }
    10     while(ch>='0'&&ch<='9') { x = x * 10+ch-48; ch = getchar(); }
    11     return x * f;
    12 }
    13 inline void write(LL x) {
    14     if( x < 0 ) putchar('-');
    15     if( x > 9 ) write(x/10);
    16     putchar(x%10+48);
    17 }
    18 const int N = 10011, M = 500011; 
    19 const LL INF = 1e16; 
    20 int n, m, S, nedge; 
    21 int head[N], vis[N];
    22 LL dist[N];   
    23 struct edge{
    24     int to, pre, val; 
    25 }e[M];
    26 struct node{
    27     int id; 
    28     LL val; 
    29     friend bool operator <(node a, node b) {
    30         return a.val > b.val; 
    31     }
    32 };
    33 priority_queue<node> Q; 
    34 inline void add(int x, int y, int v) {
    35     e[++nedge] = (edge){y, head[x], v};
    36     head[x] = nedge; 
    37 }
    38 void Dijkstra(int S) {
    39     For(i, 0, n) dist[i] = INF; 
    40     For(i, 0, n) vis[i] = 0; 
    41     dist[S] = 0; 
    42     while(!Q.empty()) Q.pop(); 
    43     
    44     Q.push((node){S, 0}); 
    45     while(!Q.empty()) {
    46         node p = Q.top(); Q.pop(); 
    47         int u = p.id; 
    48         if(vis[u]) continue; 
    49         vis[u] = 1; 
    50         for(int i=head[u]; i; i=e[i].pre) {       
    51             int v = e[i].to; 
    52             if(dist[u]+e[i].val < dist[v]) {
    53                 dist[v] = dist[u]+e[i].val; 
    54                 Q.push((node){v, dist[v]}); 
    55             }
    56         }
    57     }
    58 } 
    59 
    60 int main() {
    61     n = read(); m = read(); S = read(); 
    62     For(i, 1, m) {
    63         int x=read(), y=read(), v=read();
    64         add(x, y, v); 
    65     } 
    66     Dijkstra(S);
    67     For(i, 1, n) 
    68         if(dist[i] != INF) write(dist[i]), putchar(' '); 
    69         else printf("2147483647 "); 
    70     return 0; 
    71 }
  • 相关阅读:
    js秒换成天时分
    vuex
    匹配iPhoneX
    ASP 解析json
    WPF 实现多语言支持
    c# 用DotNetZip来解压/压缩文件
    WPF UI Close button
    VB 获取所有窗体菜单信息
    ASP/ASP.NET/VB6文件上传
    c# 上传图片到一个外链相册服务器
  • 原文地址:https://www.cnblogs.com/third2333/p/8445482.html
Copyright © 2011-2022 走看看