zoukankan      html  css  js  c++  java
  • spfa板子

    spfa板子

    Heap+Dijkstra都会写,突然发现spfa不会写了……

    inq[]记录是否已在队列中

    inline void spfa(int s){
        q.push(s);
        while(!q.empty()){
            int u=q.front();q.pop();
            inq[u]=0;
            for(register int i=head[u];i;i=nxt[i]){
                int v=vv[i];
                if(dis[v]<dis[u]+ww[i]){
                    dis[v]=dis[u]+ww[i];
                    if(!inq[v]) inq[v]=1,q.push(v);
                }
            }
        }
    }
    

    判负环

    图中无负环时,一个点最多只能被其他点松弛(n-1)

    inline bool spfa(int s){
        q.push(s);
        while(!q.empty()){
            int u=q.front();q.pop();
            inq[u]=0;
            for(register int i=head[u];i;i=nxt[i]){
                int v=vv[i];
                if(dis[v]<dis[u]+ww[i]){
                    dis[v]=dis[u]+ww[i];
                    cnt[v]=cnt[u]+1;
                    if(cnt[v]>=n) return 0;
                    if(!inq[v]) inq[v]=1,q.push(v);
                }
            }
        }
        return 1;
    }
    

    更高效的dfs版spfa判负环

  • 相关阅读:
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven教程
    SASS
  • 原文地址:https://www.cnblogs.com/santiego/p/11205131.html
Copyright © 2011-2022 走看看