标签:const STL int dijkstra maxn done inf include 优化
Code:
#include<iostream> #include<algorithm> #include<vector> #include<queue> #include<cstring> #include<cstdio> using namespace std; const int maxn = 200000; const int inf = 2147483647; int head[maxn], to[maxn<<1], nex[maxn<<1],val[maxn<<1],cnt; struct Node { int dist, u; Node(int dist, int u) :dist(dist), u(u) {} bool operator<(Node v)const { return v.dist < dist; } }; void addedge(int u,int v,int c){ nex[++cnt]=head[u],head[u]=cnt,to[cnt]=v,val[cnt]=c; } int done[maxn], d[maxn], n, m, s; void dijkstra(){ memset(done, 0, sizeof(done)); memset(d, 0, sizeof(d)); priority_queue<Node>Q; for (int i = 0; i < maxn; ++i)d[i] = inf; d[s] = 0; Q.push(Node(0, s)); while (!Q.empty()) { int u = Q.top().u; Q.pop(); if (done[u])continue; done[u] = 1; for(int v=head[u];v;v=nex[v]){ if(d[u]+val[v]<d[to[v]]){ d[to[v]]=d[u]+val[v]; Q.push(Node(d[to[v]],to[v])); } } } } int main() { //freopen("input.in","r",stdin); scanf("%d%d%d",&n,&m,&s); for(int i=1;i<=m;++i){ int a,b,c; scanf("%d%d%d",&a,&b,&c); addedge(a,b,c); } dijkstra(); for(int i=1;i<=n;++i) printf("%d ",d[i]); return 0; }
标签:const,STL,int,dijkstra,maxn,done,inf,include,优化 来源: https://blog.51cto.com/u_15291195/3006167
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。