Pagini recente » Cod sursa (job #2446996) | Cod sursa (job #2323226) | Cod sursa (job #3188373) | Cod sursa (job #2759003) | Cod sursa (job #768329)
Cod sursa(job #768329)
#include<fstream>
#define xx 1001
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,S,D,c[xx][xx],f[xx][xx],t[xx],flux;
int bf(int s,int d)
{
int li,ls,nod,i,q[xx];
memset(t,0,sizeof(t));
q[1]=s;
t[s]=-1;
for(li=ls=1;li<=ls;li++)
{
nod=q[li];
for(i=1;i<=n;i++)
if(!t[i] && c[nod][i]>f[nod][i])
{
q[++ls]=i;
t[i]=nod;
if(i==d) return 1;
}
}
return 0;
}
inline int min(int a,int b){ return (a>b ? b : a);}
int main()
{
int i,x,y;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
fin>>c[x][y];
}
S=1;D=n;
int j,r;
while(bf(S,D))
for(i=1;i<=n;i++)
{
if(t[i]==-1 || c[i][D]<=f[i][D]) continue;
r=c[i][D]-f[i][D];
for(j=i;j!=S && j;j=t[j])
r=min(r,c[t[j]][j]-f[t[j]][j]);
if(r==0) continue;
f[i][D]+=r;
f[D][i]-=r;
for(j=i;j!=S && j;j=t[j])
{
f[t[j]][j]+=r;
f[j][t[j]]-=r;
}
flux+=r;
}
fout<<flux<<'\n';
fout.close();
return 0;
}