Pagini recente » Cod sursa (job #2236910) | Cod sursa (job #2460665) | Cod sursa (job #2604149) | Cod sursa (job #302008) | Cod sursa (job #1893588)
#include <fstream>
#include<climits>
using namespace std;
ifstream cin ("maxflow.in");
ofstream cout ("maxflow.out");
int n,m,viz[1010],coada[100010],cost[1010][1010],tata[1010],vec[1010],l,flux,nr;
void read ()
{ int a,b,c;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a>>b>>c;
cost[a][b]=c;
}
}
bool bfs ()
{ for(int i=1;i<=n;i++) viz[i]=0;
int pi=1,ps=1;
coada[1]=1;
while(ps<=pi)
{
for(int i=1;i<=n;i++)
{
if(cost[coada[ps]][i]!=0 && viz[i]==0)
{
viz[i]=1; coada[++pi]=i; tata[i]=coada[ps];
}
} ++ps;
}
if(viz[n]==1) return true;
return false;
}
void solve_here ()
{ nr=1;
while(bfs())
{
for(int i=1;i<=n;i++)
{
if(cost[i][n]!=0 && viz[i]==1)
{
tata[n]=i; int minim=INT_MAX,x=n;
while(x!=1)
{
minim=min(cost[tata[x]][x],minim); x=tata[x];
}
x=n;
while(x!=1)
{
cost[tata[x]][x]-=minim; x=tata[x];
} flux+=minim;
}
}
}
}
void write()
{
cout<<flux;
}
int main()
{
read();
solve_here();
write();
cin.close();
cout.close();
return 0;
}