zoukankan      html  css  js  c++  java
  • SPFA

    SPFA

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <vector>
    #include <queue>
    
    using namespace std;
    
    #define ll long long
    #define pb push_back
    #define fi first
    #define se second
    
    const int INF = 1e9; //无穷值看情况改变
    struct node{
        int v, w;
    };
    
    //复杂度 ≈ O(2E),有时复杂度会很高接近与Bellman-ford O(VE)
    
    bool SPFA(int s, int n, vector<vector<node > >& E ){
        queue<int > que;  //队列
        vector<int > cnt(n + 1, 0); //更新次数
        vector<bool > vis(n + 1, false); //是否在队列
        vector<int > d(n + 1, INF); //距离数组
        d[s] = 0; //初始点赋值为0
        que.push(s); //压入队列
        vis[s] = true; //在队列
    
        while(!que.empty()){
            int u = que.front();
            que.pop();
            vis[u] = false; //出队列,不在队列
            for(auto e : E[u]){
                if(d[e.v] > d[u] + e.w){
                    d[e.v] = d[u] + e.w;
                    if(!vis[e.v]){ //v不在队列
                        vis[e.v] = true;
                        que.push(e.v);
                        if(++cnt[e.v] >= n) return true; //更新次数判断是否有负环
                    }
                }
            }
        }
        return false;
    }
    
    void solve(){
        int T;
        scanf("%d", &T);
        while(T--){ //T组
            int n, m;
            scanf("%d%d", &n, &m); //点数   边数
            vector<vector<node > > E(n + 1, vector<node >());
            int u, v, w; //出发点  抵达点 权值
            for(int i = 0; i < m; ++i){
                scanf("%d%d%d", &u, &v, &w);
                E[u].pb({v, w});
            }
            //从1出发
            if(SPFA(1, n, E)) printf("YES
    ");
            else printf("NO
    ");
        }
    }
    
    int main(){
    
        solve();
    
        return 0;
    }
  • 相关阅读:
    笔试题总结
    ubuntu 14.04 vim install youcompleteme
    c语言位域
    strcmp函数的使用
    Spring多数据源的配置和使用
    根据出生日期计算年龄的sql各种数据库写法
    BZOJ3165 : [Heoi2013]Segment
    BZOJ2725 : [Violet 6]故乡的梦
    BZOJ2851 : 极限满月
    BZOJ2837 : 小强的形状
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/12932803.html
Copyright © 2011-2022 走看看