Pagini recente » Cod sursa (job #710532) | Cod sursa (job #51806) | Cod sursa (job #98936) | Cod sursa (job #1052767) | Cod sursa (job #2370436)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int c[1001][1001],t[1001],bf[1001];
int n,m,S;
struct B{int d;B*n;}*l[1001];
bool bfs()
{
bf[0]=1;int b=0,e=1;t[1]=-1;
while (b<e)
{
int x=bf[b];
if(x==n){return 0;}
for(B*p=l[bf[b]];p!=NULL;)
{
int y=p->d;
if(c[x][y]>0&&t[y]==0)
{
t[y]=x;
bf[e]=y;++e;
}
p=p->n;
}
++b;
}
return 1;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i)l[i]=NULL;
for(int i=1;i<=m;++i)
{
int a,b,cost;
f>>a>>b>>cost;
{B*p=new B;
p->d=a;
p->n=l[b];
l[b]=p;}
{B*p=new B;
p->d=b;
p->n=l[a];
l[a]=p;}
c[a][b]+=cost;
}
while(1)
{
if(bfs())break;
int M=550000000;
for(int i=n,j=t[n];j>=1;i=j,j=t[j])
{
M=min(M,c[j][i]);
}
for(int i=n,j=t[n];j>=1;i=j,j=t[j])
{
c[j][i]-=M;c[i][j]+=M;
}
S+=M;
for(int i=1;i<=n;++i)t[i]=0;
}
g<<S;
}