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.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最...