sgu 185. Two shortest [shortest path] [max flow] [MLE!MLE!MLE!]
- 
    閒聊 廢話:
 是 MLE!MLE!MLE! 不是 ME!ME!ME! ㄛ
 這個 OJ 是看 dreamoon 這篇 blog 才知道的
 想說去上面隨便挑一題比較多人 AC 的來寫,就被卡記憶體卡到哭哭
 然後 dreamoon 真的好神喔 >///<
- 
    題目:給一個最多 400 個點的無向圖,求兩條從 1 到 N 無公共邊的最短路。 
- 
    解法:先算出各點到 1 的最短距離,再建一個 flow 的圖 
 s 到 1 建一條容量為 2 的邊
 為最短路樹上的每條邊各建一條對應的容量為 1 的邊
 以 N 的對應節點為 t
 求 s-t 最大流,若為 2 則有解
 dfs 輸出解即可
- 
    實作: 本題規模很小,看起來應該隨便都能過,然而…… 
 本題卡記憶體= =,4096 KB
 看我那精美的 edge struct 就知道惹最短路方面我一開始用 Dijkstra + stl priority_queue 
 但不停 MLE
 因為 stl priority_queue 不支援 decrease key
 所以更新 heap 時是直接丟新結點,空間複雜度多了 \(O(E)\)
 如果自己寫個支援 decrease key 的 heap ,空間複雜度會降到 \(O(V)\),應該能過
 但我懶,就改用 spfa 惹,空間複雜度一樣 \(O(V)\)最大流我用 Dinic,我還是只會 Dinic(自動無視某個\(O(VE^2)\)的演算法),跟全國賽時一樣,呵呵 
 為了降低記憶體用量,用 deque 而不是 vector 存邊Time Complexity:\(O(VE + V^2E) = O(V^2E)\) 
