Pagini recente » Cod sursa (job #1790777) | Cod sursa (job #1509064) | Cod sursa (job #738141) | Cod sursa (job #1480044) | Cod sursa (job #123860)
Cod sursa(job #123860)
#include <stdio.h>
#include <string.h>
using namespace std;
int a[61][61][2],w[61],e[200],n,m,f,s;
void citire()
{
freopen("traseu.in","r",stdin);
scanf("%d%d", &n, &m);
int x,y;
for (int i=1; i<=m; i++)
{
scanf("%d%d", &x, &y);
scanf("%d", &a[x][y][0]);
}
fclose(stdin);
}
void bf(int q)
{
for (int i=1; i<=n; i++)
{
if (w[1]!=0)
break;
if (a[q][i][0]!=0 && a[q][i][1]!=a[q][i][0])
{
w[i]=q;
if (w[1]==0)
bf(i);
else break;
}
}
}
void flux(int q)
{
if (w[q]!=1)
{
if (f>(a[w[q]][q][0]-a[w[q]][q][1]))
f=a[w[q]][q][0]-a[w[q]][q][1];
flux(w[q]);
}
else
if (f>(a[w[q]][q][0]-a[w[q]][q][1]))
f=a[w[q]][q][0]-a[w[q]][q][1];
}
void marcare(int q)
{
// e[++e[0]]=q;
s+=a[w[q]][q][0];
if (w[q]!=1)
{
a[w[q]][q][1]+=f;
marcare(w[q]);
}
else
a[w[q]][q][1]+=f;
}
void traseu()
{
w[1]=1;
while (w[1]!=0)
{
memset(w,0,sizeof(w));
bf(1);
if (w[1]==0)
break;
f=15000;
flux(1);
marcare(1);
}
}
int main()
{
citire();
traseu();
freopen("flux.out","w",stdout);
printf("%d",s);
fclose(stdout);
return 0;
}