Pagini recente » Cod sursa (job #1942867) | Cod sursa (job #2148788) | Statistici Alexandru Robert (skoda888) | Cod sursa (job #1115552) | Cod sursa (job #1262802)
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int MAX=1000;
vector <int> lista[MAX+5];
queue <int> q;
int n,m,c[MAX+5][MAX+5],flux[MAX+5][MAX+5],flux_min,flux_max,tata[MAX+5];
bool viz[MAX+5];
bool bfs(int nod)
{
while(!q.empty())q.pop();
for(int i=1;i<=n;++i)viz[i]=tata[i]=0;
q.push(nod);
viz[nod]=1;
while(!q.empty())
{
nod=q.front();
q.pop();
if(nod==n)
return 1;
for(int i=0;i<lista[nod].size();++i)
if(viz[lista[nod][i]]==0 and c[nod][lista[nod][i]]-flux[nod][lista[nod][i]]>0)
{
q.push(lista[nod][i]);
viz[lista[nod][i]]=1;
tata[lista[nod][i]]=nod;
}
}
return 0;
}
int main()
{
int i;
fin>>n>>m;
for(i=1;i<=m;++i)
{
int x,y,capacitate;
fin>>x>>y>>capacitate;
lista[x].push_back(y);
lista[y].push_back(x);
c[x][y]=capacitate;
}
while(bfs(1))
{
flux_min=110001;
for(i=n;i!=1;i=tata[i])
flux_min=min(flux_min,c[tata[i]][i]-flux[tata[i]][i]);
for(i=n;i!=1;i=tata[i])
{
flux[tata[i]][i]+=flux_min;
flux[i][tata[i]]-=flux_min;
}
flux_max+=flux_min;
}
fout<<flux_max;
return 0;
}