Pagini recente » Cod sursa (job #899334) | Cod sursa (job #3265376) | Cod sursa (job #3221163) | Cod sursa (job #3261463) | Cod sursa (job #2528573)
#include <cstdio>
#include<queue>
using namespace std;
int n,m;
int c[1001][1001];
int f[1001][1001];
int viz[1001];
int ant[1001];
vector<int>G[1001];
queue<int > q;
int BFS()
{
q.push(1);
for(int i=0;i<=n;i++)
viz[i]=0;
viz[1]=1;
while(!q.empty())
{
if( q.front()!=n){
for(int i=0;i<G[q.front()].size();i++)
{
if(!(c[q.front()][G[q.front()][i]]==f[q.front()][G[q.front()][i]] || viz[G[q.front()][i]]==1))
{
viz[G[q.front()][i]]=1;
q.push(G[q.front()][i]);
ant[G[q.front()][i]]=q.front();
}
}
}
q.pop();
}
return viz[n];
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int a,b,cc;
scanf("%d%d%d",&a,&b,&cc);
G[a].push_back(b);
G[b].push_back(a);
c[a][b]=cc;
}
int flux=0;
while(BFS())
{
for(int i=0;i<G[n].size();i++)
{
int nn=G[n][i];
if(c[nn][n]!=f[nn][n] || viz[nn]==1)
{
ant[n]=nn;
int minf=1000000001;
for(int nnn=n ; nnn!=1;nnn=ant[nnn])
if(minf> c[ant[nnn]][nnn]-f[ant[nnn]][nnn])
minf=c[ant[nnn]][nnn]-f[ant[nnn]][nnn];
for(int nnn=n ; nnn!=1 ;nnn=ant[nnn])
f[ant[nnn]][nnn]+=minf,f[nnn][ant[nnn]]-=minf;
flux+=minf;
}
}
}
printf("%d",flux);
return 0;
}