Pagini recente » Cod sursa (job #2097710) | Cod sursa (job #405885) | Cod sursa (job #721727) | Cod sursa (job #2943495) | Cod sursa (job #2427027)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
vector<int> g[10010];
int cost[1001][1001];
int flow[1001][1001];
int dad[1001], k;
int n, m, flux, viz[100010];
ifstream in("maxflow.in");
ofstream out("maxflow.out");
void read()
{
in >> n >> m;
int a, b, x;
for (int i = 1; i <= m; i++)
{
in >> a >> b >> x;
g[a].push_back(b);
g[b].push_back(a);
cost[a][b] = x;
}
}
int bfs()
{
k++;
int coada[1010], pi = 1;
coada[1] = 1;
for (int ps = 1; ps <= pi; ps++)
{
int nod = coada[ps];
for (int i = 0; i < g[nod].size(); i++)
{
int neigh = g[nod][i];
if (cost[nod][neigh] - flow[nod][neigh] > 0 && viz[neigh]<k)
{
viz[neigh] = k;
dad[neigh] = nod, coada[++pi] = neigh; if (neigh == n) return 1;
}
}
}
return 0;
}
void fulk()
{
while (bfs() == 1)
{
int minim = 1000000000;
for (int x = n; x != 1; x = dad[x])
{
if (cost[dad[x]][x] - flow[dad[x]][x] < minim) minim = cost[dad[x]][x] - flow[dad[x]][x];
}
flux += minim;
for (int x = n; x != 1; x = dad[x])
{
flow[dad[x]][x] += minim;
flow[x][dad[x]] -= minim;
}
}
}
int main()
{
read();
fulk();
out << flux;
return 0;
}