關於網路流最小割的一些小知識

2022-05-01 15:30:17 字數 664 閱讀 1361

1.輸出任意一種最小割的方案:

在執行完網路流演算法之後,在殘量網路上,s和t之間不連通了

進行一邊dfs/bfs,求出從s出發能到達的點集s,和不能到達的點集t

我們割掉了一組邊,把原圖劃分成了s和t兩個點集

所有從s跨越到t的滿流邊構成了乙個最小割方案

2.判斷一條邊是否滿流:

執行一次最大流演算法,得到乙個殘量網路

取殘量網路上的一條滿流邊(u, v),判斷這條邊是否一定滿流

對殘量網路執行tarjan演算法,求出所有scc

當u和v不屬於同乙個scc的時候,這條邊一定滿流

否則,我們可以在scc中找到乙個包含這條邊的反向邊的環,沿著環增廣一次,仍然不破壞流量平衡,但是這條邊已經不滿流了

3.判斷某一條邊是否可能為最小割中的一條

所有一定滿流的邊都可能為最小割

4.判斷某條邊是否一定出現在最小割中

首先還是對殘量網路求scc

考慮一條滿流邊(u, v),判斷她是否一定出現在最小割中

當u和s屬於同乙個scc,並且v和t屬於同乙個scc的時候,這條邊一定出現在最小割中

5.輸出在最小割的最小邊數

設總邊數為m,所有的邊權都乘m+1然後再+1

用這個新的圖跑最大流然後結果/(m+1)就是最小割

結果%(m+1)就是最小邊數

什麼是網路流的割?什麼是網路流的最小割?

前一向學會最大流的幾個寫法 ff.ek.dinic.就以為自己會網路流了.今天去做hh大牛的網路流習題.發現自己除了最大流.建圖以及其他性質神馬的都一片空白.拿到乙個題.無從下手來建圖.網上搜了一下網路流的建圖策略與方法.很多大牛提到最小割.我知道求最小割求出最大流就行了.最大流和最小割的值是相等的...

關於編譯的一些小知識

gnu編譯器 g 編譯 c 程式 在windows下,進入源 所在的路徑下,在命令列中輸入 g o test.exe test.cpp將test.cpp 編譯生成 test.exe 可執行檔案,如果沒有 o test.exe 選項,預設生成 a.exe 在linux下,進入源 所在的路徑下,在命令列...

關於switch的一些小知識

之前給大家介紹過關於if的一些小用法,在c語言中還有另外乙個條件判斷語句,那就是switch語句,今天我就給大家介紹一些關於switch的用法。首先,我們先聊聊為什麼要在已經擁有if語句的情況下還要再建立switch語句。那就是因為if語句雖然可以實現多分支結構,但是比較複雜 不夠直觀,而switc...