Pagini recente » Cod sursa (job #1536234) | Cod sursa (job #1799027) | Cod sursa (job #2384675) | Cod sursa (job #2123160) | Cod sursa (job #2422198)
#if 1
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;
int mat[20005][20005];
int viz[20005];
int minCut[20005];
int n, m;
int dfs(int node, int sink, int flux, int ind)
{
if (node == sink)return flux;
viz[node] = ind;
int i;
for (i = 1; i <= n; i++)
if (viz[i] != ind && mat[node][i] > 0)
{
if (mat[node][i] < flux)flux = mat[node][i];
int dfsFlux = dfs(i, sink, flux, ind);
if (dfsFlux > 0)
{
mat[node][i] -= dfsFlux;
mat[i][node] += dfsFlux;
return dfsFlux;
}
}
return 0;
}
int main()
{
int i, x, y, c;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
f >> n >> m;
for (i = 0; i < m; i++)
{
f >> x >> y >> c;
mat[x][y] = c;
}
/*for (i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
cout << mat[i][j] << " ";
cout << endl;
}
cout << endl;*/
int indexViz = 1;
int maxFlux = 0;
int flux = 0;
for (;;)
{
flux = dfs(1, n, 200005, indexViz);
indexViz++;
maxFlux += flux;
/*for (i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
cout << mat[i][j] << " ";
cout << endl;
}
cout << endl;*/
if (flux == 0) {
break;
}
}
g << maxFlux;
//cout << maxFlux;
return 0;
}
#endif