Mai intai trebuie sa te autentifici.
Cod sursa(job #1295038)
| Utilizator | Data | 18 decembrie 2014 18:28:54 | |
|---|---|---|---|
| Problema | Flux maxim | Scor | 50 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.95 kb |
#include <stdio.h>
using namespace std;
int n,m,i,k,C[1001][1001],F[1001][1001],flow,c[100000],t[1001],x,y;
bool BFS()
{
int i,p,u,x;
p=u=1;
c[p]=1;
for (i=1;i<=n;i++) t[i]=0;
while (p<=u)
{
x=c[p++];
for (i=1;i<=n;i++)
if (!t[i]&&F[x][i]<C[x][i])
{
c[++u]=i;
t[i]=x;
if (i==n) return 1;
}
}
return 0;
}
void flux(int s)
{
int m,i;
for (flow=0;BFS();flow+=m)
{
m=100000000;
for (i=n;t[i];i=t[i])
if (C[t[i]][i]-F[t[i]][i]<m) m=C[t[i]][i]-F[t[i]][i];
for (i=n;t[i];i=t[i])
F[t[i]][i]+=m;
}
}
int main()
{
freopen ("maxflow.in","r",stdin);
freopen ("maxflow.out","w",stdout);
scanf("%i%i",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%i%i%i",&x,&y,&k);
C[x][y]=k;
}
flux(1);
printf("%i",flow);
return 0;
}
