Pagini recente » Cod sursa (job #2488598) | Cod sursa (job #2125259) | Cod sursa (job #1946672) | Cod sursa (job #836093) | Cod sursa (job #1936392)
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
const int N = 1005;
const int inf = 0x3f3f3f3f;
class Muchie
{
public:
int fluxMaxim;
int fluxFolosit;
int destinatie;
int fluxRamas;
Muchie(int _destinatie, int _fluxMaxim)
{
fluxMaxim = _fluxMaxim;
destinatie = _destinatie;
fluxRamas = fluxMaxim;
fluxFolosit = 0;
}
};
int n, m;
vector<Muchie> vecini[N];
int rezultat = 0;
void citire()
{
scanf("%d %d", &n, &m);
int tmp1, tmp2, tmp3;
for(int i = 0; i < m; i++)
{
scanf("%d %d %d", &tmp1, &tmp2, &tmp3);
tmp1--;
tmp2--;
if(tmp1 == tmp2)
{
continue;
}
vecini[tmp1].push_back(Muchie(tmp2, tmp3));
}
}
int bfs(int x, int disponibil)
{
if(x == n - 1)
{
rezultat += disponibil;
return 0;
}
int l = vecini[x].size();
for(int i = 0; i < l; i++)
{
if(vecini[x][i].fluxRamas > 0 && disponibil > 0)
{
int flux = min(disponibil, vecini[x][i].fluxRamas);
int neconsumat = bfs(vecini[x][i].destinatie, flux);
vecini[x][i].fluxRamas -= (flux - neconsumat);
disponibil -= (flux - neconsumat);
}
}
return disponibil;
}
void solve()
{
bfs(0, inf);
printf("%d", rezultat);
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
citire();
solve();
return 0;
}