破爛集 大佬的spfa

2021-08-25 11:54:27 字數 796 閱讀 6694

估計所有人在看過spfa之後基本都會把其他最短路的演算法忘光吧,因為spfa不但超級簡單,而且還超級塊,所以的確非常好用,之前看到乙個大佬的spfa,感覺有幾個不錯的優化,用了之後把我1202的乙個85ms左右的演算法直接優化到65ms了,還是很給力的,所以在這裡貼一下,主要在於用deque代替queue,並且在push的時候通過對於這個d的大小的乙個模糊的判斷決定放到前面還是放到後面(queue做不到這點)。實際上可以認為deque是完爆queue的,vector是完爆stack的,因為實際上queue和stack就是用deque和vector實現的,所以從效率來說兩者幾乎沒有區別(stack和queue應該略低),而且關鍵在於queue和stack遮蔽了很多容器原始的功能(因為queue本質上是為了**更加清晰而出現的,所以並沒有什麼效率和功能可言)。所以這個spfa的確是更好的。順便說一下陣列模擬,stack模擬的確是不錯的,但是queue模擬的話會浪費很大的空間,所以還是謹慎對待為好。另外不要迷信什麼陣列模擬,有道xdoj上的題陣列模擬比deque慢。

發現之前學藝不精,這個大佬的模板抄錯了,只是乙個細微的不同,但是差別還是有的,那就是used根本不需要,之前我一直被spfa要used的慣性思維給蒙蔽了,首先說一點,經典的spfa是前出後入,這樣的方法比後入後出(也就是stack)快了不知道多少(幾十倍左右),但是因為你有了deque,所以我們可以把一些很短的點加入前方(就是deque裡面已經有這個點了)這樣其實效率會更高。

貼個不錯的模板(已經修改)

int spfa(int s , int t)}}

return d[t];

}

破爛集 輸入問題

說實話這個問題之前一直沒有意識到,後來才發現這門學問是如此高深,本著精益求精的態度,有些時間空間的高度優化還是必要的,有時候可能就跟爐石里的伏筆似的,所以即使在做最簡單的問題的時候其實也能有一些不錯的想法。由於這個問題十分高深,所以我也沒有辦法絕對說明,也是慢慢研究中的,但我會不斷更新,把我所有的研...

破爛集 stl邪術 rope

之前做一道要用到splay的問題,因為並不會splay 同時懶得學習 所以就試圖在論壇找找有沒有偷懶的辦法,沒想到真的讓我找到了,那就是rope這個結構,這個東西聽說比較新,所以如果特別老的oj 比如poj和hdu 我覺得可能懸,不過dev 前提是新版的,不是機房那種 和牛客這些應該都可以支援。這個...

大佬的難題

給n個三維座標點,滿足每維座標都是1 n的排列,求三維偏序。注意到任意兩個位置,都有乙個位置有至少兩維比另乙個位置的對應兩維大,於是可以容斥,那麼只需要做二維偏序。include include define fo i,a,b for i a i b i using namespace std ty...