最大流 最小割點集

2021-10-01 04:08:13 字數 1579 閱讀 9786

#include

using

namespace std;

const

int maxn=

1e5+10;

const

int maxm=

2e5+10;

struct e

e[maxm]

;int s, t;

//源點和匯點

int cut;

//邊的數量,從0開始編號

int head[maxm]

;//每乙個點最後一條邊的編號

int d[maxn]

;//分層圖中標記深度

int inf=(1

<<31)

-1;int cur[maxn]

;//cur就是記錄當前點u迴圈到了哪一條邊

int n, m;

void

init()

void

addedge

(int u,

int v,

int w)

void

add(

int u,

int v,

int w)

intbfs()

memset

(d,0

,sizeof

(d))

; d[s]=1

;//源點深度為1

q.push

(s);

while

(!q.

empty()

)}}if

(d[t]==0

)//當匯點的深度不存在時,說明不存在分層圖,同時也說明不存在增廣路

return1;

}int

dfs(

int u,

int dis)

//u是當前節點,dist是當前流量

for(

int&i=cur[u]

;i!=-1

;i=e[i]

.next)}}

return0;

//否則說明沒有增廣路,返回0

}int

dinic()

/********************************/

while

(int d=

dfs(s,inf))}

return ans;

}vector<

int> v;

queue<

int> q;

void

minzxg()

}}}int

main()

printf

("%d "

,dinic()

);minzxg()

;sort

(v.begin()

, v.

end())

;printf

("%d\n"

, v.

size()

);for(

int i=

0; isize()

; i++)}

return0;

}

最大流 最小割

真是不知道該說些什麼呀 感覺這是我見到過的網上敘述最最最詳細的乙個演算法了。可見我才學過幾個演算法qwq 我並不認為我能比網上講的要好 所以 emmm 我就打算解釋一下 不要管這迷一樣的邏輯 先去看看題解hhh 咳咳 等會兒 好了好了 qwq 言歸正傳 這裡的dinic演算法,是對edmonds k...

最小割最大流記錄

經過一系列的學習,明白了一些東西記錄一下備忘 割 是指刪除一些邊,使剩下的網路中沒有增光路,那麼可以得出max flow c s,t 割 為什麼呢?首先我們明白知道最大流一定是根據增光路得到i的,那麼割就是包含增光路的乙個集合,那麼sum c s,t 一定是在在這個 基礎上得到的,也就是割中一定包含...

最大流 最小割定理

割 cut 是網路中頂點的劃分,它把網路中的所有頂點劃分成兩個頂點的集合源點s和匯點t。記為cut s,t 如下圖 源點 s 1 匯點 t 5。框外是容量,框內是流量 如下圖是乙個圖的割。頂點集合s 和t 構成乙個割。如果一條弧的兩個頂點分別屬於頂點集s和t那麼這條弧稱為割cut s,t 的一條割邊...