zoukankan      html  css  js  c++  java
  • SPFA算法

    优化的Bellman_Ford算法

    • 因为Bellman_Ford的时间复杂度O(VE).当Bellman_Ford中的顶点被松弛时,与之相连的顶点才有可能被松弛。因此,可以维护一个队列。当队列中的v被松弛时,将v入队(对其的邻接点操作)。当某个结点v入队次数超过v-1说明,此时有负环。
    • O(kE)k是一个常数,一般不超过2

    伪代码

    queue<int>q;
    q.pushback(s);//源点入队
    while (!q.empty())
    {
    	取出队首元素u;
    	for (u的所有邻接边u->v)
    	{
    		if (d[u] + dis < d[v])
    		{
    			d[v] = d[u] + dis;
    			if (v不在队列中)
    				v入队;
    			if (v入队次数超过n - 1)
    				//存在可达负环
    				return;
    		}
    	}
    	
    }
    
  • 相关阅读:
    CF733F
    P4826
    洛谷P2687 & P1108
    CF42A
    洛谷P1858
    CF1428C
    洛谷P4981
    树形DP
    背包六讲(也不知道为啥就是六个 $QwQ$)
    2020
  • 原文地址:https://www.cnblogs.com/code-fun/p/15235173.html
Copyright © 2011-2022 走看看