Pagini recente » Profil XtremeXcata | Cod sursa (job #2805969) | Cod sursa (job #1549063) | Borderou de evaluare (job #1036104) | Cod sursa (job #1773987)
#include <queue>
#include<vector>
#include <cstdio>
using namespace std;
queue<int>q;
int t[1001],flu[1001][1001],viz[1001],n,m;
vector<int>mu[1001];
int c[1111][1111];
int bfs()
{
int i,j,p,si,fiu;
for(i=2;i<=n;i++)
viz[i]=0;
q.push(1);
while(!q.empty())
{
p=q.front();
q.pop();
if(p==n)continue;
si=mu[p].size();
for(i=0;i<si;i++)
{
fiu=mu[p][i];
if(viz[fiu]||c[p][fiu]==flu[p][fiu])continue;
t[fiu]=p;
q.push(fiu);
viz[fiu]=1;
}
}
return viz[n];
}
int main()
{freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int i,p,a,b,cc,si,j,mi,flux=0;
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&cc);
mu[a].push_back(b);
mu[b].push_back(a);
c[a][b]=cc;
}
viz[1]=1;
si=mu[n].size();
while(bfs() )
{
for(j=0;j<si;j++)
{
p=mu[n][j];
if(c[p][n]==flu[p][n]||viz[p]==0)continue;
i=n;mi=213456789;
t[n]=p;
while(i!=1)
{
if(mi>c[t[i]][i]-flu[t[i]][i] )mi=c[t[i]][i]-flu[t[i]][i];
i=t[i];
}
if(mi==0)continue;
i=n;
while(i!=1)
{
flu[t[i]][i]+=mi;
flu[i][t[i]]-=mi;
i=t[i];
}
flux+=mi;
}
}
printf("%d",flux);
return 0;
}