Pagini recente » Cod sursa (job #1113985) | Cod sursa (job #1138677) | Cod sursa (job #2168136) | Cod sursa (job #2110888) | Cod sursa (job #2844771)
#include <bits/stdc++.h>
#define pb push_back
#define nmax 1100
#define mflow 1000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n, m;
vector <int> graph[nmax];
int capacitati[nmax][nmax];
int parent[nmax];
struct dubla{
int nod, val;
};
queue <dubla> coada;
dubla var;
int bfs()
{
unsigned i;
int aux;
for(i = 1; i <= n; i++)
parent[i] = -1;
parent[1] = -2;
while(!coada.empty())
coada.pop();
var.nod = 1, var.val = mflow;
coada.push(var);
while(!coada.empty())
{
var = coada.front();
coada.pop();
for(i = 0; i < graph[var.nod].size(); i++)
{
aux = graph[var.nod][i];
if(parent[aux] == -1 && capacitati[var.nod][aux])
{
parent[aux] = var.nod;
int new_fl = min(var.val, capacitati[var.nod][aux]);
if(aux == n)
return new_fl;
coada.push({aux,new_fl});
}
}
}
return 0;
}
int maxflow, flowprovizoriu;
int main()
{
int a, b, c;
fin >> n >> m;
for(int i = 0; i < m; i++)
{
fin >> a >> b >> c;
graph[a].pb(b);
graph[b].pb(a);
capacitati[a][b] = c;
}
while(flowprovizoriu = bfs())
{
maxflow += flowprovizoriu;
int c = n;
while (c != 1)
{
int previ = parent[c];
capacitati[previ][c] -= flowprovizoriu;
capacitati[c][previ] += flowprovizoriu;
c = previ;
}
}
fout << maxflow;
return 0;
}