Pagini recente » Cod sursa (job #57852) | Cod sursa (job #2136970) | Cod sursa (job #1920581) | Cod sursa (job #896771) | Cod sursa (job #1383299)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector<int>v[1006];
queue <int>q;
bool used[1006];
int ant[1006];
int n,m;
int C[1006][1006],F[1006][1006];
int BFS()
{
int nod;
for(int i=1;i<=n;++i) used[i] = false;
used[1]=true;
q.push(1);
while(!q.empty())
{
nod=q.front();
q.pop();
if(nod!=n)
for(int i=0;i<v[nod].size();i++)
{
if(used[v[nod][i]]==false && F[nod][v[nod][i]]<C[nod][v[nod][i]])
{
used[v[nod][i]]=true;
ant[v[nod][i]]=nod;
q.push(v[nod][i]);
}
}
}
return used[n];
}
int main()
{
int x,y,c;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>c;
v[x].push_back(y);
v[y].push_back(x);
C[x][y]=c;
}
int flow=0,flowmin,nod;
while (BFS())
for(int i=0;i<v[n].size();i++)
{
flowmin=1<<29;
ant[n]=v[n][i];
nod=n;
while (nod!=1)
{
flowmin=min(flowmin, C[ant[nod]][nod]-F[ant[nod]][nod]);
nod=ant[nod];
}
nod=n;
while (nod!=1)
{
F[ant[nod]][nod]+=flowmin;
F[nod][ant[nod]]-=flowmin;
nod=ant[nod];
}
flow+=flowmin;
}
fout<<flow;
}