Pagini recente » Cod sursa (job #1231193) | Cod sursa (job #1009128) | Cod sursa (job #1629752) | Cod sursa (job #2418284) | Cod sursa (job #2701318)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int N = 1005;
int n, m;
int cap[N][N], flow[N][N], t[N];
vector<bool> vis;
void bfs(int startNode)
{
vis.assign(n + 1, false);
queue<int> q;
q.push(startNode);
vis[startNode] = true;
t[startNode] = 0;
while(!q.empty())
{
int node = q.front();
q.pop();
for(int y = 1; y <= n; y++)
if(cap[node][y] != flow[node][y])
{
if(!vis[y])
{
vis[y] = true;
t[y] = node;
q.push(y);
if(y == n)
return;
}
}
}
}
int main()
{
fin >> n >> m;
for(int i = 0; i < m; i++)
{
int x, y, c;
fin >> x >> y >> c;
cap[x][y] = c;
}
int fmax = 0;
do
{
bfs(1);
if(vis[n] == false)
break;
int fmin = 1 << 30;
for(int node = n; node != 1; node = t[node])
fmin = min(fmin, cap[t[node]][node] - flow[t[node]][node]);
fmax += fmin;
for(int node = n; node != 1; node = t[node])
{
flow[t[node]][node] += fmin;
flow[node][t[node]] -= fmin;
}
} while(vis[n]);
fout << fmax << '\n';
fin.close();
fout.close();
return 0;
}