Pagini recente » Cod sursa (job #2932730) | Cod sursa (job #2678525) | Cod sursa (job #2021202) | Cod sursa (job #1499647) | Cod sursa (job #1356909)
#include <stdio.h>
#include <string.h>
#include <deque>
#include <vector>
using namespace std;
FILE *f1,*g;
deque <int> q;
vector <int> v[1005];
int n,m,c1,c[1005][1005],i,flow,f[1005][1005],tata[1005];
int bf ()
{
memset (tata,0,sizeof (tata));
int nod;
tata[1]=-1;
q.erase (q.begin (),q.end());
q.push_back (1);
while (! q.empty())
{
nod=q.front ();
for (int j=0;j<v[nod].size ();j++)
{
int x=v[nod][j];
if (c[nod][x]-f[nod][x]>0 && tata[x]==0)
{
q.push_back (x);
tata[x]=nod;
if (x==n) return 1;
}
}
q.pop_front ();
}
return 0;
}
int main()
{ f1=fopen ("maxflow.in","r");
g=fopen ("maxflow.out","w");
fscanf (f1,"%d%d",&n,&m);
int x,y,nod;
for (i=1;i<=m;i++)
{
fscanf (f1,"%d%d%d",&x,&y,&c1);
v[x].push_back (y);
v[y].push_back (x);
c[x][y]=c1;
}
int min1;
while (bf ())
{
for (i=0;i<v[n].size();i++)
{
nod=v[n][i];
if (f[nod][n]==c[nod][n] || tata[nod]==0) continue;
tata[nod]=n;
nod=n;
min1=0x3f3f3f3f;
while (nod!=1)
{
min1=min (min1,c[nod][tata[nod]]) - f[tata[nod]][nod];
}
if (min1==0) continue;
nod=n;
while (nod!=1)
{
f[tata[nod]][nod]+=min1;
f[nod][tata[nod]]-=min1;
nod=tata[nod];
}
flow+=min1;
}
}
fprintf (g,"%d",flow);
return 0;
}