Pagini recente » Cod sursa (job #1876255) | Cod sursa (job #2845928) | Cod sursa (job #373373) | Cod sursa (job #1517332) | Cod sursa (job #513399)
Cod sursa(job #513399)
// infoarena: problema/maxflow //
#include <fstream>
#include <queue>
#include <iostream>
#include <cstring>
#define MAXN 1010
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int f[MAXN][MAXN],c[MAXN][MAXN],i,j,n,m,a,b,s,d,t[MAXN],r,flux,q[MAXN];
int bf()
{
//memset(t, 0, sizeof(t));
int nod,l=1,r=1;
q[1] = s;
while(l<=r)
{
nod = q[l]; l++;
for(i=1; i<=n; i++)
if(c[nod][i] > f[nod][i])
{
t[i] = nod;
q[++r] = i;
if(i == d)
return 1;
}
}
return 0;
}
int main()
{
in>>n>>m;
for(i=1; i<=m; i++)
{
in>>a>>b;
in>>c[a][b];
}
s=1, d=n;
for(flux=0; bf(); flux += r)
{
r = 1<<29;
i = d;
while(i!=s)
{
if(r > c[t[i]][i] - f[t[i]][i])
r = c[t[i]][i] - f[t[i]][i];
i = t[i];
}
i = d;
while(i!=s)
{
f[t[i]][i] += r;
f[i][t[i]] -= r;
i = t[i];
}
}
out<<flux;
return 0;
}