Pagini recente » Cod sursa (job #1829153) | Cod sursa (job #1752887) | Cod sursa (job #3286528) | Cod sursa (job #2909876) | Cod sursa (job #363219)
Cod sursa(job #363219)
#include<stdio.h>
#define DIM 1005
#define INF 11005
struct nod
{
int x;
nod *urm;
} *lst[DIM];
int n,c[DIM][DIM],f[DIM][DIM],t[DIM],rez,viz[DIM],cd[DIM];
void add (int a,int b)
{
nod *p=new nod;
p->x=b;
p->urm=lst[a];
lst[a]=p;
}
int min (int a,int b)
{
if(a<b)
return a;
return b;
}
int bf ()
{
int i,st,dr;
nod *p;
for(i=1;i<=n;++i)
viz[i]=0;
cd[st=dr=1]=viz[1]=1;
while(st<=dr)
{
for(p=lst[cd[st]];p;p=p->urm)
if(c[cd[st]][p->x]!=f[cd[st]][p->x] && !viz[p->x])
{
cd[++dr]=p->x;
t[p->x]=cd[st];
viz[p->x]=1;
if(p->x==n)
return 1;
}
++st;
}
return 0;
}
int main ()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int i,m,x,y,z,minim;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
c[x][y]+=z;
add(x,y);
add(y,x);
}
while(bf())
{
minim=INF;
for(i=n;i!=1;i=t[i])
minim=min(minim,c[t[i]][i]-f[t[i]][i]);
for(i=n;i!=1;i=t[i])
{
f[t[i]][i]+=minim;
f[i][t[i]]-=minim;
}
rez+=minim;
}
printf("%d",rez);
return 0;
}