码迷,mamicode.com
首页 > 其他好文 > 详细

[模板]Dijkstra

时间:2019-11-13 10:27:22      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:href   sdi   getchar   top   前言   har   str   opera   tor   

 前言

  考试前几天才发现一直写的Dijkstra是错的,有点惭愧,现在打了个板子放在这里,以示后人

  题目链接 : https://www.luogu.org/problem/P4779

   Code

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <queue>
 4 #include <cstring>
 5 using namespace std;
 6 typedef long long ll;
 7 const int N=100002;
 8 const int M=200002;
 9 const int inf=2147483647;
10 inline int read()
11 {
12     char ch=getchar();
13     int x=0;bool f=false;
14     while (!isdigit(ch)) f^=!(ch^45),ch=getchar();
15     while (isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
16     if (f) x=-x;return x;
17 }
18 int n,m,s;
19 int head[N],to[M],nex[M],cnt=0;
20 ll val[M];
21 ll dis[N];
22 bool vis[N];
23 struct data
24 {
25     int id;
26     ll v;
27     bool operator <(const data&A)const
28     {
29         return A.v<v;
30     }
31 };
32 inline void add(int s,int ed,ll w)
33 {
34     to[++cnt]=ed;
35     val[cnt]=w;
36     nex[cnt]=head[s];
37     head[s]=cnt;
38 }
39 inline void Dijkstra(int st)
40 {
41     priority_queue<data>q;
42     for (int i=1;i<=n;++i)
43     dis[i]=inf;
44     dis[st]=0;
45     q.push((data){st,dis[st]});
46     while (!q.empty())
47     {
48         int now=q.top().id;
49         q.pop();
50         if (vis[now]) continue;
51         vis[now]=true;
52         for (int i=head[now];i;i=nex[i])
53         {
54             int v=to[i];
55             if (!vis[v]&&dis[v]>dis[now]+val[i])
56             {
57                 dis[v]=dis[now]+val[i];
58                 q.push((data){v,dis[v]});
59             }
60         }
61     }
62 }
63 int main()
64 {
65     n=read(),m=read(),s=read();
66     int x,y,z;
67     for (int i=1;i<=m;++i)
68     {
69         x=read(),y=read(),z=read();
70         add(x,y,z);
71     }
72     Dijkstra(s);
73     for (int i=1;i<=n;++i)
74     printf("%lld ",dis[i]);
75     return 0;
76 }

 

  

[模板]Dijkstra

标签:href   sdi   getchar   top   前言   har   str   opera   tor   

原文地址:https://www.cnblogs.com/Snowindfly/p/11847064.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!