SPFA的兩種優化SLF和LLL

2021-08-04 19:21:35 字數 895 閱讀 8874

spfa有兩種優化

spfa演算法有兩個優化策略slf和lll——slf:small label first 策略,設要加入的節點是j,隊首元素為i,若dist(j)x則將i插入到隊尾,查詢下一元素,直到找到某一i使得dist(i)<=x,則將i出隊進行鬆弛操作。 slf 可使速度提高 15 ~ 20%;slf + lll 可提高約 50%。

就拿hdu4725為例:

不優化肯定會超時的。

#include using namespace std;

int n,m,c,k;

const int maxn=3e5+7;

const int inf=1e9;

vector>head[maxn];

int dis[maxn],vis[maxn];

void spfa(int n)

dequeq;

q.push_front(1);

dis[1]=0;

int sum = 0,cnt = 0;

while(!q.empty())

vis[u]=0;

sum -= dis[u],cnt--;

for(int i=0,l=head[u].size(); i=inf)puts("-1");

else printf("%d\n",dis[n/3]);

}int main()

int x;

for(int i=1; i<=n; ++i)

for(int i=1; i<=n; ++i)

int u,v,w;

while(m--)

printf("case #%d: ",tt);

spfa(n*3);

}return 0;

}

SPFA的兩種優化SLF和LLL

記錄乙個菜逼的成長。記下spfa的兩種優化,大牛請無視 spfa演算法有兩個優化演算法 slf 和 lll slf small label first 策略,設要加入的節點是j jj,隊首元素為i ii,若dis t j st i dist j dist i dist j st i 則將j插入隊首,...

兩種優化查詢的方法

兩種優化表查詢的方法 1 表的查詢順序 針對多表查詢 oracle的解析器按照從右到左的順序處理from子句中的表名,因此from子句中寫在最後的表 基礎表 driving table 將被最先處理。在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。當oracle處理多個表時...

氣泡排序演算法的兩種優化

氣泡排序 三種實現,兩種優化 首先,我們先介紹bubblesort 就是氣泡排序,氣泡排序大家應該最熟悉不過了 氣泡排序演算法的運作如下 從後往前 1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最...