SSSP dijstra+stl::heap 邻接表模版
Posted noi-aker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSSP dijstra+stl::heap 邻接表模版相关的知识,希望对你有一定的参考价值。
//SSSP dijstra+stl::heap 邻接表模版 #include<bits/stdc++.h> using namespace std; #define why 105 #define whym 1455 #define inf 0x3f3f3f3f int n,m,d[why],h[why],cnt,s,t; bool v[why]; struct node int next,to,v; a[whym*2]; struct tap int num,v; bool operator <(const tap &x)const return x.num<num; ; inline int redn() int ret=0,f=1; char ch=getchar(); while(!isdigit(ch)) if(ch==‘-‘)f=-f; ch=getchar(); while(isdigit(ch)) ret=ret*10+ch-‘0‘; ch=getchar(); return f>0?ret:-ret; inline void dij(int s) priority_queue<tap>q; tap k; d[s]=0; q.push((tap)0,s); while(!q.empty()) k=q.top(); q.pop(); if(v[k.v])continue; v[k.v]=1; for(int u=h[k.v];u;u=a[u].next) int j=a[u].to; if(d[j]>d[k.v]+a[u].v) d[j]=d[k.v]+a[u].v; if(!v[j])q.push((tap)d[j],j); inline void DoubleAdd(int x,int y,int z) a[++cnt].next=h[x]; a[cnt].to=y; a[cnt].v=z; h[x]=cnt; a[++cnt].next=h[y]; a[cnt].to=x; a[cnt].v=z; h[y]=cnt; int main() int _1,_2,_3; register int i; n=redn(); m=redn(); s=redn(); t=redn(); memset(d,0x3f,sizeof(d)); for(i=1;i<=m;i++) _1=redn(),_2=redn(),_3=redn(); DoubleAdd(_1,_2,_3); dij(s); printf("%d",d[t]); return 0;
以上是关于SSSP dijstra+stl::heap 邻接表模版的主要内容,如果未能解决你的问题,请参考以下文章