Pagini recente » Cod sursa (job #102407) | Cod sursa (job #3152855) | Cod sursa (job #182710) | Cod sursa (job #3232959) | Cod sursa (job #2554143)
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
void BFS(int start);
int n, m, nrfrunze, f[1005][1005], c[1005][1005], tata[1005], fr[1005];
int main()
{
int x, y;
fin >> n >> m;
for (int i=1;i<=m;i++)
{
fin >> x >> y;
fin >> c[x][y];
}
int schimbare;
do
{
schimbare = 0;
nrfrunze = 0;
BFS(1);
for (int i=1;i<=nrfrunze;i++)
{
tata[n] = fr[i];
int nod = n;
int minim = 1e9;
while (tata[nod])
{
int pre = tata[nod];
minim = min(minim, c[pre][nod]-f[pre][nod]);
nod = pre;
}
if (minim)
{
schimbare = 1;
nod = n;
while (tata[nod])
{
int pre = tata[nod];
f[pre][nod] += minim;
f[nod][pre] -= minim;
nod = pre;
}
}
}
} while (schimbare);
int ans = 0;
for (int i=1;i<=n;i++)
ans += f[1][i];
fout << ans << '\n';
return 0;
}
void BFS(int start)
{
int in=0, sf=0, Q[1005], uz[1005];
memset(uz,0,sizeof(uz));
Q[sf++] = start;
uz[start] = 1;
while (in < sf)
{
int aux = Q[in++];
for (int i=1;i<n;i++)
if (!uz[i] && f[aux][i] < c[aux][i])
{
Q[sf++] = i;
uz[i] = 1;
tata[i] = aux;
}
if (f[aux][n] < c[aux][n])
fr[++nrfrunze] = aux;
}
}