Luogu1345 奶牛的電信(網路流)

2022-03-20 08:43:40 字數 1463 閱讀 3525

很不幸,有時候奶牛會不小心踩到電腦上,農夫約翰的車也可能碾過電腦,這台倒霉的電腦就會壞掉。這意味著這台電腦不能再傳送電郵了,於是與這台電腦相關的連線也就不可用了。

有兩頭奶牛就想:如果我們兩個不能互發電郵,至少需要壞掉多少臺電腦呢?請編寫乙個程式為她們計算這個最小值。

以如下網路為例:

1*/ 3 - 2*

這張圖畫的是有2條連線的3臺電腦。我們想要在電腦1和2之間傳送資訊。電腦1與3、2與3直接連通。如果電腦3壞了,電腦1與2便不能互發資訊了。

輸入格式:

第一行 四個由空格分隔的整數:n,m,c1,c2.n是電腦總數(1<=n<=100),電腦由1到n編號。m是電腦之間連線的總數(1<=m<=600)。最後的兩個整數c1和c2是上述兩頭奶牛使用的電腦編號。連線沒有重複且均為雙向的(即如果c1與c2相連,那麼c2與c1也相連)。兩台電腦之間至多有一條連線。電腦c1和c2不會直接相連。

第2到m+1行 接下來的m行中,每行包含兩台直接相連的電腦的編號。

輸出格式:

乙個整數表示使電腦c1和c2不能互相通訊需要壞掉的電腦數目的最小值。

網路流的建邊永遠都是套路

而網路流的套路永遠都是建邊

把建邊一些,\(s、t\)賦個值

輕輕鬆鬆搞定。。。

這道題目很顯然,要求的是最小割。。。。

但是是點的最小割。。。

這就懵逼了。。。

怎麼辦呢?

當然是類似lct的加乙個點出來呀

然後把所有連出去的邊都連在這個點上面,

然後再從當前點連向這個點,

如果這個點要被割掉,那麼,這條邊就不走了。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define maxl 50000

#define max 200

#define inf 1e8

inline int read()

struct line

e[maxl];

int h[max],cnt;

int n,m,s,t;

inline void add(int u,int v,int w)

; h[u]=cnt++;

}int level[max];

int cur[max];

bool bfs()

}return level[t];

}int dfs(int u,int flow)

}return ret;

}int dinic()

return ret;

}int main()

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

add(i,i+n,1),add(i+n,i,0);

cout

}

Luogu1345 奶牛的電信(網路流)

很不幸,有時候奶牛會不小心踩到電腦上,農夫約翰的車也可能碾過電腦,這台倒霉的電腦就會壞掉。這意味著這台電腦不能再傳送電郵了,於是與這台電腦相關的連線也就不可用了。有兩頭奶牛就想 如果我們兩個不能互發電郵,至少需要壞掉多少臺電腦呢?請編寫乙個程式為她們計算這個最小值。以如下網路為例 1 3 2 這張圖...

洛谷 P1345 奶牛的電信

題目描述 就是讓你求無向圖最小割點數 解析 把每個點分成兩個點,連一條距離為一的邊,再把任意兩個聯通的點之間連上正無窮大的邊,這樣求出來最小割一定是割流量為一的邊。特別注意的就是源點為出發點的出點,匯點為終點的入點,否則跑出來的值一定是一。程式 include include include inc...

luogu1345 USACO5 4 奶牛的電信

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