Pagini recente » Cod sursa (job #1682439) | Profil Mentalistul | Cod sursa (job #1515898) | Cod sursa (job #181756) | Cod sursa (job #1103984)
#include <stdio.h>
#include <vector>
#include <deque>
#include <string.h>
using namespace std;
FILE *f,*g;
vector <int> v[1005];
deque <int> q;
int n,m,c1,c[1005][1005],t[1005],i,s,d,min1,flux;
int bf ()
{
memset (t,0,sizeof (t));
int nod;
t[1]=-1;
q.push_back (s);
while (! q.empty())
{
nod=q.front ();
for (int j=0;j<v[nod].size ();j++)
{
int x=v[nod].at (j);
if (c[nod][x]>0 && t[x]==0)
{
q.push_back (x);
t[x]=nod;
}
}
q.pop_front ();
}
if (t[d]!=0) return 1;
else return 0;
}
int main()
{f=fopen ("maxflow.in","r");
g=fopen ("maxflow.out","w");
fscanf (f,"%d%d",&n,&m);
int x,y;
s=1;
d=n;
for (i=1;i<=m;i++)
{
fscanf (f,"%d%d%d",&x,&y,&c1);
c[x][y]=c1;
v[x].push_back(y);
}
while (bf())
{
i=d;
min1=1000000;
while (i!=s)
{
if (c[t[i]][i]<min1) min1 =c[t[i]][i];
i=t[i];
}
flux+=min1;
i=d;
while (i!=s)
{
c[t[i]][i]-=min1;
i=t[i];
}
}
fprintf (g,"%d",flux);
return 0;
}