Pagini recente » Cod sursa (job #1343320) | Cod sursa (job #1933617) | Cod sursa (job #282855) | Cod sursa (job #462528) | Cod sursa (job #2025182)
#include <fstream>
#include <queue>
#define VAL 1005
#define INF 1000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int N, M, i, j, ANS, a, b;
int graph[VAL][VAL], c, X;
int prec[VAL], p;
bool viz[VAL];
queue <int> Q;
bool BFS()
{
for (j=1; j<=N; j++)
viz[j]=false;
viz[1]=true;
Q.push(1);
while (Q.empty()==false)
{
p=Q.front();
Q.pop();
for (j=1; j<=N; j++)
{
if (viz[j]==false && graph[p][j]>0)
{
viz[j]=true;
prec[j]=p;
Q.push(j);
}
}
}
return viz[N]==true;
}
void Ford_Fulkerson()
{
while (BFS()==true)
{
X=INF;
for (i=N; i!=1; i=prec[i])
{
p=prec[i];
X=min(X, graph[p][i]);
}
for (i=N; i!=1; i=prec[i])
{
p=prec[i];
graph[p][i]-=X;
graph[i][p]+=X;
}
ANS+=X;
}
}
int main()
{
fin >> N >> M;
for (i=1; i<=M; i++)
{
fin >> a >> b >> c;
graph[a][b]=c;
}
Ford_Fulkerson();
fout << ANS << '\n';
fin.close();
fout.close();
return 0;
}