Pagini recente » Cod sursa (job #1721376) | Cod sursa (job #2296875) | Cod sursa (job #1497111) | Cod sursa (job #279972) | Cod sursa (job #2289386)
#include <bits/stdc++.h>
#define NMAX 1001
#define MMAX 5001
#define mp make_pair
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n, m, G[NMAX][NMAX], max_flow, flow;
bool viz[NMAX];
queue < pair <int, int> > q;
int mymap[NMAX];
bool BF()
{
q.push(mp(1, (1<<30)));
viz[1] = 1;
while(!q.empty())
{
int nod = q.front().first;
int capacity = q.front().second;
q.pop();
if(nod == n)
{
max_flow += capacity;
flow = capacity;
return 1;
}
for(int i = 1; i <= n; i++)
if(G[nod][i]>0 && !viz[i])
{
q.push(mp(i, min(capacity, G[nod][i])));
viz[i] = 1;
mymap[i] = nod;
}
}
return 0;
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= m; i++)
{
int a, b, c;
fin >> a >> b >> c;
G[a][b] = c;
}
bool ok = false;
do{
int nod = n;
ok = false;
memset(viz, 0, sizeof(viz));
memset(mymap, 0, sizeof(mymap));
ok = BF();
if(ok)
while(nod != 1)
{
int x = mymap[nod];
G[x][nod] -= flow;
G[nod][x] += flow;
nod = x;
}
}while(ok);
fout << max_flow;
return 0;
}