MaxFlow_Edmond-Karp's

/*
**  This is Edmond-Karp's algorithm for finding maximum flow
**  in a undirected (flow)graph. Runtime Complexity: O(VE^2)
*/

#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;

#define min(a,b) (a)<(b)?(a):(b)
#define INF 2147483647
#define MAX 100

vector<int> adjList[MAX+7];
int V, capacity[MAX+7][MAX+7], parent[MAX+7];

int augment(int s,int v,int f)
{
    if(v==s) return f;

    int u=parent[v], mf=augment(s,u,min(f,capacity[u][v]));

    capacity[u][v]-=mf, capacity[v][u]+=mf;

    return mf;
}

int process(int SRC,int SNK)
{
    int out=0, u,v,mf;

    while(true)
    {
        queue<int> Q;
        Q.push(SRC);

        memset(parent,-1,sizeof parent);

        while(!Q.empty())
        {
            u=Q.front(), Q.pop();

            if(u==SNK) break;

            for(int i=0;i<(int)adjList[u].size();i++)
            {
                v=adjList[u][i];

                if(parent[v]!=-1 || capacity[u][v]==0) continue;

                parent[v]=u, Q.push(v);
            }
        }

        if(parent[SNK]==-1) break;      //then there is no more augmenting path, so algorithm terminates.

        mf=augment(SRC,SNK,INF), out+=mf;
    }

    return out;
}

int main()
{
    /* code */
    return 0;
}