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

dijistra

时间:2019-01-25 15:58:22      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:include   bool   max   span   char   its   bit   for   bsp   

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 100010,maxm = 500010;
 4 int begin[maxn],to[maxm],next[maxm],v[maxm],e,d[maxn];
 5 bool b[maxn];
 6 int buf[17];
 7 int n,m,s;
 8 inline void read(int &x){
 9     char ch=getchar(); x=0;
10     while(ch<0) ch=getchar();
11     while(ch>=0 && ch<=9) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
12 }
13 inline void write(int x){
14     if(!x){putchar(0);putchar( );return;}
15     register int cnt=0;
16     while(x)buf[++cnt]=(x%10)+48,x/=10;
17     while(cnt)putchar(buf[cnt--]);
18     putchar( );
19 }
20 inline void add(int x,int y,int z){
21     to[++e] = y;
22     v[e] = z;
23     next[e] = begin[x];
24     begin[x] = e;
25 }
26 priority_queue< pair<int,int> > q;
27 inline void dijistra(){
28     for(int i = 1;i <= n;i++)d[i]=1e9+5;
29     d[s] = 0;
30     q.push(make_pair(0,s));
31     while(!q.empty()){
32         int x = q.top().second;
33         q.pop();
34         if(b[x])continue;
35         b[x] = 1;
36         for(int i = begin[x];i;i = next[i]){
37             int y = to[i],k = v[i];
38             if(d[y] > d[x]+k){
39                 d[y] = d[x]+k;
40                 q.push(make_pair(-d[y],y));
41             }
42         }
43     }
44 }
45 int main(){
46     read(n);
47     read(m);
48     read(s);
49     for(register int i = 1,x,y,z;i <= m;i++){
50         read(x);
51         read(y);
52         read(z);
53         add(x,y,z);
54     }
55     dijistra();
56     for(int i = 1;i <= n;i++)write(d[i]);
57     return 0;
58 }

 

dijistra

标签:include   bool   max   span   char   its   bit   for   bsp   

原文地址:https://www.cnblogs.com/wangyifan124/p/10319829.html

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