Pagini recente » Cod sursa (job #994906) | Monitorul de evaluare | Cod sursa (job #1587660) | Cod sursa (job #2817868) | Cod sursa (job #1640224)
#include <iostream>
#include <fstream>
#include <cstring>
#define INF 0x3f3f
using namespace std;
ifstream h("maxflow.in");
ofstream g("maxflow.out");
int n,m,S,D,c[1001][1001],f[1001][1001],t[1001],flux;
void citire()
{
int i,x,y,C;
h>>n>>m;
S=1;
D=n;
for (i=1;i<=m;i++)
{
h>>x>>y>>C;
c[x][y]=C;
}
}
int BF(int s,int d)
{
int p,u,nod,i,q[1001];
memset(t,0,sizeof(t));
p=0;
u=0;
q[p]=s;
t[s]=-1;
for (;p<=u;p++)
{
nod=q[p];
for (i=1;i<=n;i++)
if (!t[i] && c[nod][i]>f[nod][i])
{
q[++u]=i;
t[i]=nod;
if (i==d)
return 1;
}
}
return 0;
}
void flux_maxim(void)
{
int i,r=0;
for (flux=0;BF(S,D);flux+=r)
{
r=INF;
i=D;
while (i!=S)
{
r=min(r,c[t[i]][i]-f[t[i]][i]);
i=t[i];
}
i=D;
while (i!=S)
{
f[t[i]][i]+=r;
f[i][t[i]]-=r;
i=t[i];
}
}
}
int main()
{
citire();
flux_maxim();
g<<flux;
return 0;
}