Pagini recente » Cod sursa (job #1946845) | Istoria paginii utilizator/upt_numeanume | Cod sursa (job #222069) | Profil M@2Te4i | Cod sursa (job #2004019)
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
FILE *F=fopen("maxflow.in", "r"), *G=fopen("maxflow.out", "w");
int cd[1002], t[1002], c[1002][1002], f[1002][1001], x, y, z, n, m, Fmin;
bitset<1002> viz;
vector<int> a[1002];
int BFS()
{
int x, y;
cd[0] = 1;
cd[1] = 1;
viz = 0;
viz[1] = 1;
for(int i = 1; i <= cd[0]; ++ i)
{
x = cd[i];
for(int j = 0; j < a[x].size(); ++ j)
{
y = a[x][j];
if(c[x][y] == f[x][y] || viz[y]) continue;
viz[y] = 1;
cd[++cd[0]] = y;
t[y] = x;
if(y == n) return 1;
}
}
return 0;
}
int main()
{
int flow;
fscanf(F, "%d %d ", &n, &m);
for(int i = 0; i < m; ++ i)
{
fscanf(F, "%d %d %d", &x, &y, &z);
c[x][y] = z;
a[x].push_back(y);
a[y].push_back(x);
}
for(flow = 0; BFS(); flow += Fmin)
{
Fmin = inf;
for(int i = n; i > 1; i = t[i]) Fmin = min(Fmin, c[t[i]][i] - f[t[i]][i]);
if(!Fmin) continue;
for(int i = n; i > 1; i = t[i])
f[t[i]][i] += Fmin, f[i][t[i]] -= Fmin;
}
fprintf(G, "%d", flow);
return 0;
}