代码:
int mp[N][N], book[N], pre[N];
int n;
int max_flow()
{
int i, u, ans = 0;
while(1)
{
memset(book, 0, sizeof(book));
memset(pre, 0, sizeof(pre));
queue<int> q;
book[1] = 1;
q.push(1);
while(!q.empty())
{
u = q.front();
q.pop();
if(u == n) break;
for(i = 1; i <= n; i++)
{
if(!book[i] && mp[u][i] > 0)
{
book[i] = 1;
q.push(i);
pre[i] = u;
}
}
}
if(!book[n]) break;
int M = inf;
for(i = n; i != 1; i = pre[i])
{
M = min(M, mp[pre[i]][i]);
}
for(i = n; i != 1; i = pre[i])
{
mp[pre[i]][i] -= M;
mp[i][pre[i]] += M;
}
ans += M;
}
return ans;
}