網頁

2014年5月30日 星期五

UVa 10594 Data Flow

題意:
    給你一個無向圖,兩點之間的邊的容量是K,每條邊有不同的cost,現在有大小為D的資料,要從起點傳到終點,問把全部資料傳過去的最小cost是多少,如果不能全部傳過去則輸出Impossible.
  • 第一行輸入N M:總共N個點,編號從1~N,然後底下有M行
  • 有M行,每行u v c:表示點u和點v之間的cost為c(雙向圖)
  • 最後一行D K:要傳的資料大小為D,每個邊的容量為K
想法:
    最小cost最大流題型(MCMF),基本上就是建圖,然後套MCMF演算法模板,但提交後發現時間根本是壓秒過@@,花了2.979s(時限3s),但是這個秒數排名還在前一半以內...。
    不過還是要壓一下秒數,看了同學的code後,發現這題可以最佳化的地方在於"每條邊的容量都是一樣的",所以你可以把每條邊的容量當成1,然後再乘以K就好了。底下附上兩種code,第一個是差點TLE的模板code,第二個是最佳化的code,兩者的差別只差在MCMF()這個function的寫法。第二個的時間是0.135s, 和原本差了20幾倍。

1.

2.

沒有留言:

張貼留言