原创 EK算法(連接矩陣)

/** Edmonds-Karp算法是最簡單的網絡流算法,當然也比較慢複雜度爲O(V*E^2) 編寫簡單而且很好理解。。後面還會貼最快的dinic 算法 複雜度爲O(E*V^2) ( E爲邊數,V爲點數)

原创 小知識+碎東西

/** 今晚還是寫點常用或不常用的小知識點吧,一看到算法兩個字就頭疼 1、 <math.h> 給出兩直角邊a, b hypot(a, b); //返回斜邊長度

原创 最小費spfa()+ek() 鄰接表

/** 貼下最小費的鄰接表模板 圖算法中鄰接表應用極其廣泛,在速度和邊處理方面都要比矩陣好很多 最小費鄰接矩陣模板前面提到了 就不多說了 包括添邊等常用的技巧前面也都提到了 就是求網絡流是會用

原创 匈牙利算法 && EK(鄰接表)

/** 用鄰接表添邊是圖論中基礎中的基礎,實用價值十分可觀 添邊爲固定格式,理解的最好辦法是畫幾個點,自己用手 模擬一下添邊的過程,你會感慨萬千,成就感不言而喻。。 鏈接表 3劍客爲:edge[], ed

原创 stack && queue && priority_queue 使用方法 (棧, 隊列, 優先隊列)

/** 貼下堆棧,優先隊列的使用,競賽中優先隊列常會用到,前面兩個 也經常用,但效率低,一般自己用數組寫 */ #include <stack> #include <queue> using namespace std

原创 最小生成樹 prim()

/** prim算法應該是我學會的第一個圖算法 最小生成樹,一個無向圖使每兩個點都連通的最小花費,每條邊都會有 邊權,這個算法在點少邊多的情況下要比kruskal 更有優勢,一般都不多於 1000個點。

原创 浮點公約數

/** 這個,和那個沒啥區別對吧,就是用了個math.h 裏面的fmod() POJ 2335 */ #include <math.h> double fgcd(double a, double b) { i

原创 最小費用最大流 spfa() + ek()

/** 一個多月沒碰,感覺忘完了…… 最小費就是有多條路可以滿足最大流量的情況下所需要的最小費用 把費用改成相反數或改下spfa()的鬆弛就可最大費了 比如:從北京到上海運送一批貨物,給出中間經過每條路

原创 拓撲排序 topsort()

/** 不知道topsort 排序有沒有專門的算法,不過今天貼這個挺簡單的,也好理解 拓撲排序就是,給出一系列的需求關係,求一個序列,這個序列完全滿足這裏面 的全部需求,直到結束 如:你想要認識 奧巴馬

原创 二分圖匹配的擴展問題

/** 前面提到了匈牙利算法解決二分圖匹配問題,但是基於二分圖還有幾個經常 見的擴展問題如下: 1、最大獨立集點數 2、最小頂點覆蓋數 3、最小路徑覆蓋數 ****

原创 SPFA 算法

/** SPFA: Shortest Path Faster Algorithm 看到名字不禁爲之一顫,SPFA算法是西南交通大學段凡丁於1994年發表的。 SPFA 也是競賽中最常見的算法之一,不僅僅用來解決帶負

原创 floyed 算法

/** floyed 是用動態規劃解決完全最短路的算法,一次調用即可得到任意兩個點間的最短路徑 複雜度爲O(n^3),適用於稠密圖,頂點數一般在100 以內適用 結構簡單,易於編寫 floyed算法還可

原创 匈牙利算法(二分圖匹配)

/** 匈牙利算法是解決二分圖匹配問題的兇器,二分圖匹配問題在實際應用中也很 廣泛,諸如婚戀、交朋友這些網站,會很快介紹給你最合適的對象,這都離不開 匹配算法的支撐。 在剛接觸這些算法前往往會有一種莫名的

原创 模擬退火算法解決最近最遠問題

/** 模擬退火算法真的很巧妙,而且很多問題也能轉換成這個算法 這個算法最大的妙處,就是它會無序的向着你所要求的答案去 尋找,直到找到符合你的精度,概率很高 如:在一個1024*768的平面上有N 個點,

原创 最小生成樹 kruskal()

/** kruskal 算法和prim 功能一樣,在點多邊少的情況下更有優勢 用專業的口吻說就是,kruskal 適用於疏密圖,prim 適用於稠密圖 還是那句話,模板都會用,關鍵在轉換 高中就那點知識