USACO4 2 網路流模板題

2021-07-12 01:07:40 字數 2116 閱讀 6292

裸的網路流…練習抄模板(紅書dinic)

因為bool寫成int除錯了好久qaq

繼續抄模板(匈牙利演算法)

vector

g[maxn];//與i相關聯

int from [maxn],tot;

bool use[maxn];

bool match(int x)}}

return

false;

}int hungary()

//嘗試每乙個點能否增廣.

}return tot;

}

當然這麼裸的二分圖,網路流模型也很好構造.只是**複雜多了

貪心貪心貪心…..

最後一次縮小了二分範圍,取消了cout輸出0s過….cout真是慢慢慢

就是給出n<1000個物品,經過兩種機器的加工,兩種機器分別有a,b臺,它們加工的速度不盡相同,給出每個機器加工時間,求最後完成所有a加工的時間和完成所有b加工的時間

因為覺得a每次選最快加工的,b也同理就好了嘛

一開始寫貪心是這樣寫的(還修正了幾次…)

優先佇列,按照finishtime + cost從小到大排列.

for (int i = 1; i <= n; i++) /

/等待下乙個a

int time = bm.top().finishtime; /

/最優儀器上一次完成時間

int add = bm.top().oncetime; /

/這個要求時間(取出來的是和最小的)

cout << time << " " << add << endl;

time += add; /

/完成當前工作

ansb = max(ansb, time);

bm.pop();

bm.push(machine(time ,add)); /

/進入排序

這樣貪心是不對的,因為5 3 5 8這樣的結果會是14qaq

*/}

然後看到最後一行的那組資料..徹底崩盤(覺得最優子結構就這樣掛了qaq)

然後看大牛題解..果然貪心從後往前掃是很重要的技巧…

看了各位大牛的解釋之後,我是坐在馬桶上冥思苦想,想到屁股出血,終於差不多想通了: 注意到a產生的工件不一定是需要馬上送給b來處理的。只要b可以在最後時限前處理好這些工件就行。 那麼我們反演時間,想象b的工作不是組裝成品,而是逆時間軸運轉,分解成品成為工件,那麼cost[a]其實給出了b做拆解工作的時間約束。也就是說,假設b在t時間開始拆,那麼最早拆完的那個工件在時間軸上要比a最晚交付的晚。依次,就可以得到上面的演算法。 = = 太敬仰你們了。。。。 交了**之後發現usaco題解裡面說的和我這裡說的一樣。。。匿了。。。

就這樣二分b的最後時間,貪心掃一遍就可以了

因為cout和inf太大t了一次…

這樣思路的好處在於不必擔心是否有更優的解,

只需要每次選最後拆完的就可以啦..

資料有一點弱,第一次沒用用最晚拆完的居然過了…

//每次選完成時間能夠最大的那個人.

bool

check(int end)

for (int i = n; i ; --i) //選最晚的那乙個拆}}

if (choose == -1)

finish[choose] -= brr[choose];

}return

true;

}

當然神牛的**簡明精要多了

for (int k=0;k<2;k++)

//搜尋可行,選最先

cost[k][i]=min;

delay[minj]+=t[k][minj];}}

int ans=0;

for (int i=0;iif (cost[0][i] + cost[1][n-i-1] > ans)

//對稱位置最後的選擇

ans=cost[0][i]+cost[1][n-i-1];

fout<0][n-1]<<" "

<

網路流的初步應用 USACO4 2 草地排水

對於一道網路流的初級問題來說,使用dinic演算法未免有些小題大 做,現在我們使用廣搜的辦法求解該題,在此之前我們首先需要了解一下解決此網路流問題需要的基本定義。定義 增廣路徑 可以理解為從源點s到匯點t的一條流量不為0的路徑,在這裡我們不考慮負流量的情況 殘餘流量 即當前路徑下容量減去當前流量的值...

HDU3549 網路流 模板

在此給出我的dinic和ek網路流模板,sap以及dinic的優化日後更新 以hdu3549為樣板給出我的模板 原題 如下 ek by acer.mo include include include include includeusing namespace std int n,m,i bool ...

洛谷 3376 網路流模板 EK Dinic

給你乙個網路圖,以及源點和匯點,求最大流先讀入乙個有向圖,記錄源點到每個節點的流量,每個節點的前驅 從匯點倒著用bfs尋找增廣路徑 1次只找一條 最後算出最大流 話說從源點開始,記錄後繼也可以 讀入順序 因為是單向圖,所以判斷now和i之間有連線時,只能取e now i include includ...