Pagini recente » Cod sursa (job #814825) | Cod sursa (job #1263266)
#include <cstdio>
#include <vector>
#define nmax 1005
using namespace std;
FILE *f=fopen("maxflow.in","r");
FILE *g=fopen("maxflow.out","w");
int c[nmax][nmax],p[nmax][nmax];
int a[nmax],k[nmax],nr,n,m,minim,tot;
bool ok;
vector <int> v[nmax];
vector <int> ::iterator it;
int main()
{int i,j,x,y,z;
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=m;i++)
{fscanf(f,"%d %d %d",&x,&y,&z);
c[x][y]=z;
v[x].push_back(y);
}
ok=true;
do
{for (i=1;i<=n;i++) a[i]=0;
nr=1;i=1;
k[nr]=1;
while (i<=nr)
{for (it=v[k[i]].begin();it!=v[k[i]].end();it++)
{if (a[*it]==0&&p[k[i]][*it]<c[k[i]][*it])
{a[*it]=k[i];
k[++nr]=*it;}
}
++i;}
if (a[n]!=0)
{j=n;
minim=1<<30;
while (j!=1)
{minim=min(minim,c[a[j]][j]-p[a[j]][j]);
j=a[j];
}
j=n;
while (j!=1)
{p[a[j]][j]+=minim;
j=a[j];
}
tot+=minim;
}
else ok=false;
}while (ok==true);
fprintf(g,"%d\n",tot);
return 0;
}