#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 的一條割邊...