Pagini recente » Cod sursa (job #2553714) | Cod sursa (job #2324770) | Cod sursa (job #2443942) | Cod sursa (job #1582128) | Cod sursa (job #1164919)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
#define NM 1010
#define df(i,j) (C[i][j]-F[i][j])
using namespace std;
int C[NM][NM],F[NM][NM];
vector <int> a[NM];
int i,j,n,m,st,dr;
int TT[NM],q[NM],BF[NM];
FILE *f,*g;
void read()
{
int i,x,y,z;
f=fopen("maxflow.in","r");
g=fopen("maxflow.out","w");
fscanf(f,"%d%d",&n,&m);
st=1; dr=n;
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&x,&y,&z);
a[x].push_back(y);
a[y].push_back(x);
C[x][y]=z;
}
}
bool BFS()
{
int i,j,x;
for (i=1;i<=n;i++) BF[i]=0,TT[i]=-1;
q[q[0]=1]=1;
BF[1]=1;
for (i=1;i<=q[0];i++)
{
x=q[i];
if (x==n) break;
for (j=0;j<a[x].size();j++)
{
if (BF[a[x][j]]==1 || df(x,a[x][j])==0) continue;
TT[a[x][j]]=x;
BF[a[x][j]]=1;
q[++q[0]]=a[x][j];
}
}
return (BF[n]==1);
}
void solve()
{
int i,x,mn,ans=0;
while (BFS())
{
for (i=1;i<=n-1;i++)
if ( BF[i]==1 && df(i,n)!=0 )
{
for (mn=df(i,n),TT[n]=i,x=n;x!=1;x=TT[x])
mn=min(mn,df(TT[x],x));
ans+=mn;
if (mn>0)
for (x=n;x!=1;x=TT[x])
{
F[TT[x]][x]+=mn;
F[x][TT[x]]-=mn;
}
}
}
fprintf(g,"%d",ans);
}
int main()
{
read();
solve();
return 0;
}