Pagini recente » Cod sursa (job #2060918) | Cod sursa (job #2061279) | Cod sursa (job #1192949) | Cod sursa (job #38431) | Cod sursa (job #287580)
Cod sursa(job #287580)
#include <cstdio>
#include <queue>
#define dim 1100
using namespace std;
int n, m, c[dim][dim], f, p[dim];
queue<int> q;
bool bfs()
{
int nod, i, viz[dim];
while (!q.empty()) q.pop();
memset(viz, 0, sizeof(viz));
q.push(1);
viz[1]=1;
while (!q.empty())
{
nod=q.front();
q.pop();
if (nod==n) continue;
for (i=1; i<=n; i++)
if (c[nod][i] && !viz[i])
{
q.push(i);
p[i]=nod;
viz[i]=1;
//if (i==n) return continue;
}
}
return viz[n];
}
int main()
{
int i, x, y, z, fm, j;
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
scanf("%d %d\n", &n, &m);
for (i=1; i<=m; i++)
{
scanf("%d %d %d\n", &x, &y, &z);
c[x][y]=z;
}
for (f=0; bfs();)
for (j=1; j<n; j++)
if (c[j][n])
{
p[n]=j;
fm=1<<30;
for (i=n; i!=1; i=p[i])
if (c[p[i]][i]<fm) fm=c[p[i]][i];
if (fm==0) continue;
for (i=n; i!=1; i=p[i])
{
c[p[i]][i]-=fm;
c[i][p[i]]+=fm;
}
f+=fm;
}
printf("%d\n", f);
return 0;
}