Pagini recente » Cod sursa (job #2025824) | Cod sursa (job #436639) | Cod sursa (job #2803491) | Cod sursa (job #2486140) | Cod sursa (job #1941291)
#include <fstream>
using namespace std;
bool viz[1001];
int n, muchii, x, y, c, maxflow, m[1001][1001], t[1001], fmax, q[5001];
void bfs (int nod) {
int p, i, u;
for (i = 1; i <= n; i++)
viz[i] = false;
p = u = 1; q[1] = nod;
while (p <= u) {
nod = q[p]; p++;
for(i = 1; i <= n; i++)
if(m[nod][i] > 0 and viz[i] == 0)
q[++u] = i, viz[i] = 1, t[i] = nod;
}
}
int main () {
ifstream fi("maxflow.in");
ofstream fo("maxflow.out");
fi >> n >> muchii;
for (int i = 1; i <= muchii; i++)
fi >> x >> y >> c, m[x][y] = c;
while (true){
bfs(1);
if (!viz[n])
break;
for (int j = 1; j <= n; j++)
if (m[j][n] > 0) {
fmax = m[j][n];
int i = j;
while (i != 1)
fmax = min(fmax, m[t[i]][i]), i = t[i];
m[j][n] -= fmax;
m[n][j] += fmax;
i = j;
while (i != 1) {
m[t[i]][i] -= fmax;
m[i][t[i]] += fmax;
i = t[i];
}
maxflow += fmax;
}
}
fo << maxflow;
return 0;
}