Pagini recente » Cod sursa (job #2572629) | Cod sursa (job #2584937) | Cod sursa (job #3166619) | Cod sursa (job #2851586) | Cod sursa (job #2116559)
#include <iostream>
#include <fstream>
#include <list>
#include <algorithm>
using namespace std;
int cap[1001][1001];
list<int>kov[1001];
int prev[1001];
bool v[1001]={0};
int n, m;
void find_path(int x)
{
v[x]=true;
if(x<n)
{
for(list<int>::iterator it=kov[x].begin(); it!=kov[x].end(); it++)
{
if(cap[x][*it]>0 and !v[*it])
{
prev[*it]=x;
find_path(*it);
}
}
}
else
{
int veg=x;
int kezd=prev[x];
int minim=2000000000;
while(veg!=1)
{
if(cap[kezd][veg]<minim) minim=cap[kezd][veg];
kezd=prev[kezd];
veg=prev[veg];
}
veg=x;
kezd=prev[x];
while(veg!=1)
{
cap[kezd][veg]-=minim;
cap[veg][kezd]+=minim;
kezd=prev[kezd];
veg=prev[veg];
}
}
v[x]=false;
}
int main()
{
ifstream f("maxflow.in");
ofstream g("maxflow.out");
f>>n>>m;
int x, y, z;
for(int i=1; i<=m; i++)
{
f>>x>>y>>z;
cap[x][y]=z;
kov[x].push_back(y);
kov[y].push_back(x);
}
find_path(1);
int ered=0;
for(list<int>::iterator it=kov[n].begin(); it!=kov[n].end(); it++) ered+=cap[n][*it];
g<<ered<<endl;
return 0;
}