Pagini recente » Cod sursa (job #3170529) | Cod sursa (job #2401860) | Cod sursa (job #928383) | Cod sursa (job #2098583) | Cod sursa (job #3163165)
///Alexandru Morus
#include <bits/stdc++.h>
using namespace std;
ifstream in("maxflow.in");
ofstream out ("maxflow.out");
vector<int> g[2000];
int flux[1001][1001],tata[2001],n;
bool bfs()
{
int vf[2000] = {0};
queue<pair<int,int>> Q;
vf[1] = 1;
tata[1] = 1;
Q.push({1,9999999});
while(!Q.empty())
{
int nod = Q.front().first;
int val = Q.front().second;
Q.pop();
for(auto i : g[nod])
{
if(!vf[i] && flux[nod][i])
{
tata[i] = nod;
vf[i] = 1;
Q.push({i,min(val,flux[nod][i])});
if(i == n)
{
return 1;
}
}
}
}
return 0;
}
int main()
{
int m,i,a,b,c,af = 0;
in >> n >> m;
for(i = 1; i <= m; i ++)
{
in >> a >> b >> c;
g[a].push_back(b);
g[b].push_back(a);
flux[a][b] = c;
}
while(bfs())
{
int minim = 9999999999;
for(i = n; i != 1; i = tata[i])
{
minim = min(minim,flux[tata[i]][i]);
}
for(i = n; i != 1; i = tata[i])
{
flux[i][tata[i]] += minim;
flux[tata[i]][i] -= minim;
}
af += minim;
}
out << af;
return 0;
}