1062 昂貴的聘禮 網路流技壓群雄!

2021-10-04 18:10:58 字數 2959 閱讀 7796

題目鏈結

不愧是中文題b( ̄▽ ̄)d,

拿到題求最小費用,物品和物品存在單向依賴,而且還有地位的限制,情況比較複雜,想到的第一種方法是網路流,不過很難在邊上把對等級的限制體現出來,所以對等級限制我的處理方法是

好了最重要的問題,如何建圖?顯然所有邊的容量都是1,保證不重複走。

不算很慢

;//存放輸入進來的物品數目和替代品資訊

ll pre1[max]

, pre2[max]

, vis[max]

, dist[max]

, minf[max]

, mincost =

0, maxflow =0;

void

addedge

(ll from, ll to, ll cap, ll cost)

//檢查j物品擁有者的地位是否處於[l,r]區間之內

bool

checklevel

(ll j, ll l, ll r)

bool

spfa

(ll s, ll t)}}

}return dist[t]

!= inf;

}void

update

(ll s, ll t)

maxflow +

= minf[t]

; mincost +

= minf[t]

* dist[t];}

void

minflow

(ll s, ll t)

intmain()

}//建圖

//0:n-1 物品節點

//n:起始節點 n+1:終止節點

ll s = n, t = n +

1, level = v[0]

[0].second;

for(

int k = level - m; k <= level; k++

)//只加入地位在 [k,k+m]之間的邊

for(

int i =

1; i < n; i++)}

minflow

(s, t)

; res =

min(res, mincost);}

cout << res << endl;

}然後呢你會發現,我們這個網路流其實流量不是很重要,每次也只找最短的一條增廣路徑,本質上就是乙個spfa的最短路徑,ծㅂծ,,但是我樂意用網路流

測試資料1:1

41000032

28000

35000

100021

4200

300021

4200502

05250

測試資料2:1

51000034

23000

32000

42000

59000

800023

35000

42000

57000

500010

200041

51900501

04000

測試資料3:3

81000036

23000

32000

42000

59000

71000

85008

800023

35000

42000

57000

500011

61000

200041

51900501

0500011

74007

200041

51900803

02950

測試資料4:1

10132400

123400

2550067

00560

0213400

4560

0234500

6700643600

1324

測試資料5:1

41000032

2133

100022

4131

100031

421004

0105

測試資料6:3

51000034

23000

32000

42000

59000

800023

35000

42000

57000

500010

200041

51900501

03950

測試資料7:0

51000034

23000

32000

42000

59000

800023

35000

42000

57000

500040

200031

51900502

03950

poj 1062 昂貴的聘禮

這個題是乙個簡單的樹形dp,只是有乙個地位差限制,可以列舉可行區間,在可行區間裡進行dp.include include include include include include include include include include includeusing namespace st...

poj1062 昂貴的聘禮

做這題代價確實很昂貴,從昨天晚上一直到今天上午都在debug,今天上午提交還出現各種wa。比較明顯的最短路,有幾個地方要注意一下,首先建圖有個地方要注意以下,這題是用臨界矩陣儲存的有向圖,而且是由交換品指向購買品,然後將虛節點設為購買品的價值,最後列舉每乙個可能地位區間di求最短路,因為對於區間 c...

昂貴的聘禮(POJ1062)

這個玩了好久啊,是我第一次寫出這樣的最短路徑。還是參考了其它人的才出來,注意的有 1 是單向圖,2 把不滿足權值的提前全初始化。其實不用topo排序也可的。關鍵 void dfs int k include include include include include include includ...