Pagini recente » Cod sursa (job #1672029) | Cod sursa (job #1971129) | Cod sursa (job #2025119) | Cod sursa (job #183260) | Cod sursa (job #1106041)
#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,fl[1005][1005];
int bf ()
{
memset (t,0,sizeof (t));
int nod;
t[1]=-1;
q.erase (q.begin (),q.end());
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]-fl[nod][x]>0 && t[x]==0)
{
q.push_back (x);
t[x]=nod;
if (x==d) return 1;
}
}
q.pop_front ();
}
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);
v[y].push_back (x);
}
while (bf())
{
i=d;
min1=1000000;
while (i!=s)
{
if (c[t[i]][i]-fl[t[i]][i]<min1) min1 =c[t[i]][i]-fl[t[i]][i];
i=t[i];
}
flux+=min1;
i=d;
while (i!=s)
{
fl[t[i]][i]+=min1;
fl[i][t[i]]-=min1;
i=t[i];
}
}
fprintf (g,"%d",flux);
return 0;
}