// Ford-Fulkerson algorithm int maxFlow(const vector<vector<int> > &g, int source, int dest) { vector<vector<int> > residual = g; // residual graph for original graph int res = 0, cap = 0; while ((cap = findAugmentingPath(residual, source, dest)) > 0) res += cap; return res; }
void BilateralBFS::solve() { while(findAugmentingPath()) { processPath(); } int numEdgesInMatching = computeMatchset(); computeInvitees(); if(invitees.size() != numEdgesInMatching){ std::cerr << "Num edges in matching: " << numEdgesInMatching << " does not equal num invitees: " << invitees.size() << "!!!" << std::endl; } }