Pagini recente » Istoria paginii utilizator/dinud | Monitorul de evaluare | Monitorul de evaluare | Istoria paginii utilizator/mateialexandru25 | Cod sursa (job #3229743)
#include <iostream>
#include <fstream>
#include <climits>
#include <deque>
#define nmx 1005
using namespace std;
int n,a,b,c,m,r[nmx][nmx],from[nmx];
bool bfs (int start,int ending)
{
for (int i=1;i<=n;i++)
from[i]=0;
from[start]=-1;
deque <int> dq;
dq.push_back(start);
while (!dq.empty())
{
auto u=dq.front();
dq.pop_front();
for (int i=1;i<=n;i++)
{
if (r[u][i]>0 && !from[i])
{
from[i]=u;
dq.push_back(i);
}
}
}
return from[ending]!=0;
}
int main()
{
ifstream f ("maxflow.in");
ofstream g ("maxflow.out");
f>>n>>m;
while (f>>a>>b>>c)
r[a][b]+=c;
int source=1,dest=n;
long long netflow=0;
while (bfs(source,dest))
{
int flow=INT_MAX;
int u=dest;
while (u!=source)
{
if (r[from[u]][u]<flow)
flow=r[from[u]][u];
u=from[u];
}
u=dest;
while (u!=source)
{
r[from[u]][u]-=flow;
r[u][from[u]]+=flow;
u=from[u];
}
netflow+=flow;
}
if (netflow) g<<netflow;
else g<<"Apa nu ajunge!";
}