Pagini recente » Cod sursa (job #186301) | Cod sursa (job #1018269) | Cod sursa (job #829589) | Cod sursa (job #524123) | Cod sursa (job #387244)
Cod sursa(job #387244)
#include<cstdio>
#include<fstream>
using namespace std;
int c[1005][1005],n,maxflow,t[1005],v[1005],nv=0;
void citire()
{
int m,x,y,z;
ifstream fin("maxflow.in");
fin>>n>>m;
for(;m;m--)
{
fin>>x>>y>>z;
c[x][y]=z;
if(y==n)
v[++nv]=x;
}
}
void bfs(int s,int d)
{
int coada[1005],st,dr,k,i;
st=dr=1;
for(i=1;i<=n;i++)
t[i]=-1;
coada[st]=s;
t[s]=0;
while(st<=dr)
{
k=coada[st++];
if(k==d)
return;
for(i=2;i<=n;i++)
if(t[i]==-1 && c[k][i]>0)
{
coada[++dr]=i;
t[i]=k;
}
}
}
void ek()
{
int cmin=200001,gata=0,i,j;
while(!gata)
{
gata=1;
bfs(1,n);
for(j=1;j<=nv;j++)
if(t[v[j]]!=-1 && c[v[j]][n]>0)
{
t[n]=v[j];
cmin=200001;
for(i=n;t[i];i=t[i])
if(c[t[i]][i]<cmin)
cmin=c[t[i]][i];
if(cmin!=200001)
{
gata=0;
maxflow+=cmin;
for(i=n;t[i];i=t[i])
{
c[t[i]][i]-=cmin;
c[i][t[i]]+=cmin;
}
}
}
}
}
int main()
{
citire();
ek();
ofstream fout("maxflow.out");
fout<<maxflow;
return 0;
}