Pagini recente » Cod sursa (job #840459) | Cod sursa (job #239046)
Cod sursa(job #239046)
#include <cstdio>
#include <queue>
#define N 1100
#define inf 110010
using namespace std;
typedef struct noduri
{
int val;
noduri *urm;
} adr;
int n,m,i,j,x,y,z,tata[N],f[N][N],cp,rez;
char E[N];
char ok;
adr *L[N],*p;
queue<int> C;
void bfs()
{
E[1]=1;
for (C.push(1); !C.empty(); C.pop())
for (p=L[C.front()]; p; p=p->urm)
if (!E[p->val] && f[C.front()][p->val]>0)
{
tata[p->val]=C.front();
if (p->val==n) return;
E[p->val]=1;
C.push(p->val);
}
ok=0;
}
void clear()
{
memset(tata,0,sizeof(tata));
memset(E,0,sizeof(E));
for (; !C.empty(); C.pop());
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d\n",&n,&m);
memset(tata,0,sizeof(tata));
for (i=1; i<=m; i++)
{
scanf("%d%d%d",&x,&y,&z);
p=new adr;
p->val=y; p->urm=L[x];
L[x]=p;
p=new adr;
p->val=x; p->urm=L[y];
L[y]=p;
f[x][y]=z;
}
ok=1;
rez=0;
bfs();
while (ok)
{
cp=inf;
for (i=n; tata[i]>0; i=tata[i])
if (f[tata[i]][i]<cp) cp=f[tata[i]][i];
rez+=cp;
for (i=n; tata[i]>0; i=tata[i])
{
f[tata[i]][i]-=cp;
f[i][tata[i]]+=cp;
}
clear();
bfs();
}
printf("%d",rez);
return 0;
}