Pagini recente » Cod sursa (job #2360022) | Cod sursa (job #1552822) | Cod sursa (job #763559) | Cod sursa (job #2400959) | Cod sursa (job #2289420)
#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;
vector <int> v[NMAX];
int mymap[NMAX];
bool BF()
{
while(!q.empty())
q.pop();
q.push(mp(1, (1<<30)));
viz[1] = 1;
while(!q.empty())
{
int nod = q.front().first;
int capacity = q.front().second;
q.pop();
for(int i = 0; i < v[nod].size(); i++)
{
int next = v[nod][i];
if(G[nod][next]>0 && !viz[next])
{
q.push(mp(next, min(capacity, G[nod][next])));
viz[next] = 1;
mymap[next] = nod;
if(next == n)
{
max_flow += min(capacity, G[nod][next]);
flow = min(capacity, G[nod][next]);
return 1;
}
}
}
}
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;
v[a].push_back(b);
v[b].push_back(a);
}
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;
}