Pagini recente » Statistici Hatnean Maria Cristina (Cristina_16) | Profil Flavius456 | Clasament dupa rating | Clasament dupa rating | Cod sursa (job #320199)
Cod sursa(job #320199)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#define N 1001
using namespace std;
int a[N][N];
int n;
#define oo 0x3f3f3f3f
void read_file(char* buff_file)
{
int m;
ifstream f(buff_file);
f>>n;
f>>m;
int left,right,value;
int i;
for (i=1;i<=m;++i)
{
f>>left>>right>>value;
a[left][right]=value;
}
}
int tata[N];
int v[N];
int nr;
bool used[N];
int bfs(int i=1,int value=n)
{
int j;
for (j=1;j<=n;++j)
if (a[v[i]][j]!=0 && used[j]==0)
{
tata[j]=v[i];
v[++nr]=j;
used[j]=1;
if (j==value)
return 1;
}
if (i<nr)
bfs(i+1,value);
else
return 0;
}
void init()
{
memset(used,0,sizeof(bool)*(n+1));
used[1]=1;
memset(v,0,sizeof(int)*(n+1));
v[1]=1;
nr=1;
int i;
for (i=1;i<=n;++i)
tata[i]=1;
tata[1]=0;
}
int max_flow()
{
int flux=0;
int min;
int i;
init();
while (bfs(1,n))
{
//cout<<"1";
min=oo;
for (i=n;i!=1;i=tata[i])
{
if (min > a[tata[i]][i])
min=a[tata[i]][i];
}
for (i=n;i!=1;i=tata[i])
{
a[tata[i]][i]-=min;
a[i][tata[i]]+=min;
}
init();
flux+=min;
}
return flux;
}
int main()
{
read_file("maxflow.in");
ofstream g("maxflow.out");
g<<max_flow()<<"\n";
return 0;
}