Pagini recente » Cod sursa (job #1473941) | Cod sursa (job #1776657) | Cod sursa (job #1701417) | Cod sursa (job #2138372) | Cod sursa (job #320214)
Cod sursa(job #320214)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <fstream>
using namespace std;
int a[1001][1001];
int n;
#define oo 0x3f3f3f3f
void read_file(char* const buff_file)
{
int m;
fstream f(buff_file,ios::in);
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[1001];
int v[1001];
int nr;
bool used[1001 ];
bool bfs()
{
for (int i=1;i<=nr;++i)
for (int 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==n)
return 1;
}
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()
{
v[1]=1;
nr=1;
used[1]=1;
int flux=0;
int min;
int i;
while (bfs())
{
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()
{
fstream g("maxflow.out",ios::out);
read_file("maxflow.in");
g<<max_flow();
return 0;
}