Pagini recente » Cod sursa (job #2258466) | Cod sursa (job #2903062) | Cod sursa (job #275804) | Cod sursa (job #2946745) | Cod sursa (job #2843582)
#include <bits/stdc++.h>
using namespace std;
int st, dr, n, m, i, x, y, c, nod, coada[1005], dad[1005], flux[1005][1005], capacity[1005][1005], minn_flow, maxx_flow;
bool viz[1005];
vector <int> v[1005];
void BFS()
{
memset(viz, false, sizeof(viz));
coada[1] = 1;
st = 1;
dr = 1;
viz[1] = true;
while(st <= dr)
{
int nod1 = coada[st];
for(int i = 0; i < v[nod1].size(); i ++)
{
int nod2 = v[nod1][i];
if(viz[nod2] == false && capacity[nod1][nod2] != flux[nod1][nod2])
{
viz[nod2] = true;
dad[nod2] = nod1;
coada[++ dr] = nod2;
}
}
st ++;
}
}
int main()
{
ifstream f("maxflow.in");
ofstream g("maxflow.out");
f >> n >> m;
for(i = 1; i <= m; i ++)
{
f >> x >> y >> c;
capacity[x][y] = c;
v[x].push_back(y);
v[y].push_back(x);
}
while(true)
{
BFS();
if(viz[n] == false)break;
nod = n;
minn_flow = INT_MAX;
while(nod != 1)
{
minn_flow = min(minn_flow, capacity[dad[nod]][nod] - flux[dad[nod]][nod]);
nod = dad[nod];
}
nod = n;
while(nod != 1)
{
flux[dad[nod]][nod] += minn_flow;
flux[nod][dad[nod]] -= minn_flow;
nod = dad[nod];
}
maxx_flow += minn_flow;
}
g << maxx_flow << "\n";
return 0;
}