Pagini recente » Cod sursa (job #655197) | Cod sursa (job #488811) | Cod sursa (job #1203554) | Cod sursa (job #939133) | Cod sursa (job #279865)
Cod sursa(job #279865)
#include<fstream>
#define INF 1000000
#define N 1001
using namespace std;
int c[N][N], flux, d[N], f[N][N], t[N], b[N], n, m, x, y, cost;
void edmondsKarp();
int bf();
int main()
{
ifstream f("maxflow.in");
ofstream g("maxflow.out");
f>>n>>m;
for(int i = 1; i <= m; i++)
{
f>>x>>y>>cost;
c[x][y] = cost;
}
edmondsKarp();
g<<flux;
return 0;
}
void edmondsKarp()
{
int min,i,j;
do{
min = bf();
if(min > 0)
{
flux+=min;
i = n;
while(i!=1)
{
j = t[i];
f[j][i] += min;
f[i][j] -= min;
i = j;
}
}
}
while(min !=0);
}
int bf()
{
int coada[N],prim=1, ultim=1, nod_cur,i;
for(i = 1; i <= n; i++)
t[i] = coada[i] = d[i] = 0;
d[1] = INF;
coada[prim] = 1;
while(prim <= ultim)
{
nod_cur = coada[prim];
for(i=1;i<=n;i++)
if(t[i]== 0 && c[nod_cur][i] - f[nod_cur][i] > 0)
{
coada[++ultim] = i;
t[i] = nod_cur;
if(d[nod_cur] < c[nod_cur][i] - f[nod_cur][i])
d[i] = d[nod_cur];
else
d[i] = c[nod_cur][i] - f[nod_cur][i];
if(i == n)
return d[n];
}
prim++;
}
return 0;
}