Pagini recente » Cod sursa (job #2631777) | Cod sursa (job #1072003) | Cod sursa (job #1543732) | Cod sursa (job #2460749) | Cod sursa (job #905058)
Cod sursa(job #905058)
#include <cstring>
#include <vector>
#include <fstream>
#include <queue>
#define MAX 1010
using namespace std;
vector<int> G[MAX];
int x, y, z, i, n, m, flow, solFlow, f[MAX][MAX], from[MAX], cap[MAX][MAX];
queue <int> Q;
bool viz[MAX];
bool BF()
{
memset(viz, 0, sizeof(viz));
from[1] = 0;
viz[1] = 1;
Q.push(1);
while(!Q.empty())
{
x = Q.front();
Q.pop();
for(vector<int> :: iterator it = G[x].begin(); it != G[x].end(); ++it)
if(f[x][*it] != cap[x][*it] and !viz[*it])
{
from[*it] = x;
viz[*it] = 1;
Q.push(*it);
}
}
return viz[n];
}
int main()
{
ifstream fi("maxflow.in");
ofstream fo("maxflow.out");
fi >> n >> m;
for(i = 1; i <= m; i++)
{
fi >> x >> y >> z;
G[x].push_back(y);
G[y].push_back(x);
cap[x][y] = z;
}
while(BF())
{
flow = int(2e9);
for(i = n; i != 1; i = from[i])
flow = min(flow, cap[from[i]][i] - f[from[i]][i]);
for(i = n; i != 1; i = from[i])
f[from[i]][i] += flow, f[i][from[i]] -= flow;
solFlow += flow;
}
fo << solFlow << "\n";
return 0;
}