USACO5 4 奶牛的電信(最小割)

2021-08-16 21:22:28 字數 1425 閱讀 3505

傳送門

最小割的點的數量

一般的最小邊求的是邊的權值和,這裡要求割掉的最少的點的數量。

原本以為割掉的最少的邊的數量就是割掉的最少的點的數量。於是寫了個最小割跑,失敗了。

後來看到沒有建雙向邊,於是建了但還是gg;

錯誤之處在於這張圖

如果割點的話,我們只需要割掉紅色的點;如果割邊的話需要割掉兩條邊,這就是問題所在。那麼如何處理呢?

我們採用拆點的思想;

對於每乙個點都複製。比如要從x向y連邊,先從x向x+n連一條邊,長度為1(因為每個點只能被割掉一次);再從x+n向y連一條邊,長度為inf。然後從s+n到t跑最大流(最小割)即可;

對於為什麼這樣進行建邊,在進行一些解釋:因為乙個點可以連許多條邊,兩點之間只能連一條邊(意會一下?),所以我們就把割點轉化成了割邊。

如下圖

//複製節點

for (int i=1; i<=m; i++)

// for (int i=0; i<=num_edge; i++) printf("%d %d %d\n",edge[i^1].to,edge[i].to,edge[i].dis);

s+=n; n*=2;

dinic(s,t);

printf("%d\n",maxflow);

return

0;}考慮一下這種「拆點」「把點轉化成邊」的思想,還是挺常用的

該建雙向邊的時候建雙向邊

寫完題目及時總結

USACO5 4 奶牛的電信

傳送門 usaco5.4 奶牛的電信 農夫約翰的奶牛們喜歡通過電郵保持聯絡,於是她們建立了乙個奶牛電腦網路,以便互相交流。這些機器用如下的方式傳送電郵 如果存在乙個由c臺電腦組成的序列a1,a2,a ca 1,a 2,a c a1 a2 ac 且a 1a 1 a1 與a 2a 2 a2 相連,a 2...

洛谷1345 奶牛的電信 (最大流最小割)

洛谷1345 給出點的個數,邊的條數,源點和匯點。分別給出與邊相連的點,邊權為1。求最少刪去多少點使得源點和匯點不連通。題目是求刪點,最大流最小割演算法刪的是邊,所以要割點轉化為割邊 最大流最小割其實並不能算乙個演算法,只是將求最小割轉化為求最大流 將乙個點拆成兩個點,其中乙個點負責連線入邊,另外乙...

luogu1345 USACO5 4 奶牛的電信

一開始我是這樣想的 直接把所有邊的容量建成1然後最小割就是答案。因為最小割的定義就是割去容量和最小的邊使得s和t不連通,把所有邊的容量設為1,最小割不就是答案嗎?結果wa了。這道題是要歌曲最少的點,而我成了割去最少的邊。但我又考慮,乙個大小為1的流不正好對應應該去掉乙個點嗎?但是又一想,發現如下情況...