Pagini recente » Cod sursa (job #1117573) | Cod sursa (job #3128308) | Cod sursa (job #807251) | Cod sursa (job #3280277) | Cod sursa (job #1891742)
#include <fstream>
#include<climits>
using namespace std;
ifstream cin ("maxflow.in");
ofstream cout ("maxflow.out");
int n,k,m,start[5010],tata[1010],coada[1010],cost[1010][1010],viz[1010],nr,minim[1010],flux;
struct bla
{
int nod,urm;
} t[1010];
void read ()
{ int a,b,c;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a>>b>>c;
t[++k].nod=b; t[k].urm=start[a]; start[a]=k; cost[a][b]=c;
}
}
bool bfs ()
{
int ps=1,pi=1;
coada[1]=1; tata[1]=-1; minim[1]=INT_MAX;
while(ps<=pi)
{
int x=start[coada[ps]];
while(x)
{
if(viz[t[x].nod]<nr && cost[coada[ps]][t[x].nod]!=0)
{coada[++pi]=t[x].nod,tata[t[x].nod]=coada[ps],viz[t[x].nod]=nr; minim[t[x].nod]=min(minim[coada[ps]],cost[coada[ps]][t[x].nod]);
if(t[x].nod==n) return true;}
x=t[x].urm;
} ++ps;
}
return false;
}
void solve_here ()
{ nr=1;
while(bfs())
{
int x=n;
while(tata[x]!=-1)
{
cost[tata[x]][x]-=minim[n];
x=tata[x];
}
flux+=minim[n]; ++nr;
}
}
void write ()
{
cout<<flux;
}
int main()
{
read();
solve_here();
write();
cin.close();
cout.close();
return 0;
}