POJ 3680 Intervals(最小費用流)
題意:n個區間, 每個區間有一個值, 讓你選擇若干區間, 使得沒有一個點被覆蓋超過k次的前提下的最大值。
思路:我們可以把區間端點離散化然後跑費用流, 不超過k次, 我們可以把這個對應流量屬性。 那麼不難想到, 將區間端點作為結點, 連一條流量為1,費用為-a[i].c的邊, 因為可以跳過一些點, 所以我們把每個相鄰端點之間用流量INF,費用為0的邊連接, 然後源點流量為k, 匯點流量為k, 當其滿流的時候, 就求出了最大費用, 而且可以保證每個結點覆蓋不會超過k次。
最後多說一下, 這個流量特性, 為什麼最大流等於最小割, 其實很簡單, 因為限制一條路的最大流量的就是那個最小流量的地方。
細節參見代碼:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include