Pagini recente » Cod sursa (job #583113) | Cod sursa (job #2615161) | Cod sursa (job #2953610) | Cod sursa (job #3134053) | Cod sursa (job #2756294)
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 1005
#define INF INT_MAX
using std::ifstream;
using std::ofstream;
using std::min;
int copie[NMAX][NMAX];
int parinte[NMAX];
bool visit[NMAX];
int N, C, D;
void DFS_rec(int s) {
visit[s] = true;
for (int i = 1; i <= N; ++i)
if (!visit[i] && copie[s][i] > 0)
{
parinte[i] = s;
DFS_rec(i);
}
}
bool DFS(int s, int t)
{
memset(visit, false, sizeof(visit));
memset(parinte, 0, sizeof(parinte));
parinte[s] = -1;
DFS_rec(s);
return visit[t];
}
int flux_maxim(int s, int t) {
int max_flux = 0, flux;
while (DFS(s, t)) {
flux = INF;
for (int vecin = t; vecin != s; vecin = parinte[vecin])
flux = min(flux, copie[parinte[vecin]][vecin]);
for (int vecin = t; vecin != s; vecin = parinte[vecin])
{
copie[vecin][parinte[vecin]] += flux;
copie[parinte[vecin]][vecin] -= flux;
}
max_flux += flux;
}
return max_flux;
}
int main() {
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
fin >> N >> D;
for (int i = 1; i <= D; i++) {
int x, y, m;
fin >> x >> y >> m;
copie[x][y] += m;
}
int x = flux_maxim(1, N);
fout << x << "\n";
//for (int i=0;i<C;++i)
// fout << copie[i][N] << " ";
fin.close();
fout.close();
return 0;
}