這個zkw大神非常6,把兩種很顯然的網路流演算法結合了起來。
zkw費用流=ek費用流+dinic最大流
對,你沒有看錯。
我們回憶一下dinic找增廣路的過程,是不是一遇到一條可以走的邊就走,走出來一條源點到匯點的一條可行的路徑,就可以了。
我們再回憶一下ek費用流的過程,是不是先跑spfa,使其找出一條流量不為0的,最小費用的,從源點到匯點的,路徑。
這條路也是可行的,那麼我們每次做spfa只能增廣一條路徑。
剩下spfa剩下的資料就沒有用了?
結合一下,我們當前增廣的路徑肯定在源點的最短路圖上。這個結論是不是挺顯然的。
因為一條不在最短路圖上的路徑肯定費用沒有最短路圖上的費用小。
這個最短路圖也是可以一次spfa跑出來的。(正著跑和反著跑其實都是乙個道理)。
這時,我們順著最短路圖來做一次dinic找增廣路就可以了。
並且,我們再做spfa的時候,順便分一下層,那就可以很好的利用dinic的分層優化。
spfa的slf優化也可以加上。
優點大於缺點:在資料量較大的時候,特別是增廣路較多,較長的時候,特別有優勢。
缺點不說了吧,就是資料小的時候常數大。這個是無法避免的。
#include#include#include#include#includeusing namespace std;
int n,m,begin,end;
struct edges[100010];
int first[5010],len=1;
dequef;
bool tf[5010];
int d[5010],ty[5010];
void ins(int x,int y,int c,int cos);first[x]=len;
len++;s[len]=(edge);first[y]=len;}
bool spfa()
} return tot;}
void mcmf()
printf("%d %d\n",flow,cost);}
int main()
mcmf();
}
python爬蟲學習第三十天
今天的內容 維基百科六度分割 終結篇 還記得之前,我們建立了收集從凱文 貝肯開始的維基詞條鏈結的爬蟲,最後儲存在資料庫 裡。為什麼這裡又把這個遊戲搬出來?因為它體現了一種從乙個頁面指向另乙個頁面的鏈 接路徑選擇問題 即找出 和 org wiki eric idle 鏈結路徑 這和從上面的馬爾可夫鏈裡...
Redis學習之環境搭建(第三十天)
redis是乙個開源的使用ansi c語言編寫 遵守bsd協議 支援網路 可基於記憶體亦可持久化的日誌型 key value資料庫,並提供多種語言的api。資料結構伺服器,因為 value 可以是 字串 string 雜湊 hash 列表 list 集合 sets 和 有序集合 sorted set...
第三十九周學習筆記
原文 rich feature hierarchies for accurate object detection and semantic segmentation目標檢測發展停滯,通過複雜的ensemble模型才能勉強提高一些精度 兩個 insights 三個模組 一些名詞 為什麼不直接使用fi...