I've been trying to understand Dinic's Max Flow algorithm. I think I've fairly understood how the algorithm works.

In each iteration, you create a level graph using BFS and then find blocking flow in that level graph. You would need **O(N)** iterations and in each iteration, blocking flow can be found in * O(NM)* complexity. This is the place where I'm stuck. I've seen some implementations like Stanford Notebook Dinic implementation . But it seems to me that in the worst case you might need

*complexity to find the blocking flow if you implement the code this way. Can anyone help me to understand why the complexity is*

**O(M^2)***for finding blocking flow ?*

**O(NM)**