zoukankan      html  css  js  c++  java
  • hdu_2544_最短路(spfa版子)

    题目连接:hdu_2544_最短路

    存个自己写的SPFA的板子

     1 #include<cstdio>
     2 #include<cstring>
     3 #define mst(a,b) memset(a,b,sizeof(a))
     4 #define F(i,a,b) for(int i=a;i<=b;i++)
     5 
     6 const int N=10011,inf=1<<30;
     7 int g[N],v[N*2],nxt[N*2],w[N*2],ed,d[N],in[N],cnt[N],Q[N];
     8 inline void adg(int x,int y,int z){v[++ed]=y,w[ed]=z,nxt[ed]=g[x],g[x]=ed;}
     9 
    10 bool spfa(int S,int n,int hd=1,int tl=0){//S为源点,n为点数
    11     F(i,0,n)d[i]=inf;
    12     mst(cnt,0),mst(in,0),cnt[S]=1,Q[++tl]=S,d[S]=0;
    13     for(int x,i;hd<=tl;)for(i=g[x=Q[hd++]],in[x]=0;i;i=nxt[i])
    14         if(d[v[i]]>d[x]+w[i]){
    15             d[v[i]]=d[x]+w[i];
    16             if(!in[v[i]]){
    17                 in[v[i]]=1,d[v[i]]<d[Q[hd]]?Q[--hd]=v[i]:Q[++tl]=v[i];//SLF优化
    18                 if(++cnt[v[i]]>n)return 0;//有负环
    19             }
    20         }
    21     return 1;
    22 }
    23 
    24 int n,m;
    25 int main(){
    26     while(scanf("%d%d",&n,&m),n+m){
    27         mst(g,0),ed=0;
    28         int x,y,z;
    29         F(i,1,m)scanf("%d%d%d",&x,&y,&z),adg(x,y,z),adg(y,x,z);
    30         spfa(1,n),printf("%d
    ",d[n]);
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    iBatis系列一
    iBatis入手案例
    需求分析7字诀
    自我意识为王
    物联网关键技术之一
    物联网之二:传感器无线网络
    物联网之二:传感器无线网络
    物联网时代之一
    项目经理的心法
    项目管理规划
  • 原文地址:https://www.cnblogs.com/bin-gege/p/5696082.html
Copyright © 2011-2022 走看看