Int G [N] [N];/* residual stream */<br/> bool vis [N]; /* mark the array */<br/> int level [N]; <br/> int n, m;/* Number of vertices, number of edges */<br/> int SRC, sink;/* SCR source sink */<br/> int build () {<br/>/* graph creation */<br/>}< br/> int find (int x) {<br/> for (INT I = 1; I <= N; I ++) {<br/> If (G [x] [I]! = 0 & level [I] = level [x] + 1) <br/> return I; <br/>}< br/> return 0; <br/>}< br/> int BFS () {<br/> queue <int> que; <br/> bool flag = 0; <br/> for (INT I = 1; I <= N; I ++) {<br/> level [I] = inf; <br/> vis [I] = false; <br/>}< br/> que. push (SRC); <br/> vis [SRC] = true; <br/> level [SRC] = 0; <br/> while (! Que. empty () {<br/> int temp = que. front (); <br/> que. pop (); <br/> for (INT I = 1; I <= N; I ++) {<br/> If (G [temp] [I]! = 0 &&! Vis [I]) {<br/> vis [I] = true; <br/> level [I] = level [temp] + 1; <br/> que. push (I); <br/>}< br/> If (temp = sink) Flag = true; <br/>}< br/> return flag; <br/>}< br/> int dinic () {<br/> int U, V, capflow, last; <br/> vector <int> path; <br/> int maxflow = 0; <br/> while (BFS () {<br/> path. clear (); <br/> path. push_back (SRC); <br/> while (find (SRC )! = 0) {<br/> U = path. Back (); <br/> If (u! = Sink) {<br/> If (V = find (u) path. push_back (V); <br/> else {path. pop_back (); level [u] = inf ;}< br/>}else {<br/> capflow = inf; <br/> for (INT I = 0; I <path. size (); I ++) {<br/> U = path [I]; <br/> If (I + 1) = path. size () break; <br/> V = path [I + 1]; <br/> If (G [u] [v] <capflow) <br/> capflow = G [u] [v]; <br/>}< br/> last =-1; <br/> maxflow ++ = capflow; <br/> for (INT I = 0; I <path. size (); I ++) {<br/> U = path [I]; <br/> If (I + 1) = path. size () break; <br/> V = path [I + 1]; <br/> G [u] [v]-= capflow; <br/> G [v] [u] + = capflow; <br/> If (G [u] [v] = 0 & last =-1) <br/> last = u; <br/>}< br/> while (path. back ()! = Last) path. pop_back (); <br/>}< br/> return maxflow; <br/>}