Pagini recente » Cod sursa (job #3213997) | Cod sursa (job #2397537) | Cod sursa (job #1104253) | Cod sursa (job #534675) | Cod sursa (job #540106)
Cod sursa(job #540106)
# include <fstream>
# include <iostream>
# include <vector>
# define DIM 1024
# define INF 2121212121
using namespace std;
int n, m, F, c[DIM][DIM], f[DIM][DIM], t[DIM], v[DIM], q[DIM];
vector<int>G[DIM];
void read ()
{
ifstream fin ("maxflow.in");
fin>>n>>m;
int a, b, k;
for(int i=1;i<=m;++i)
{
fin>>a>>b>>k;
c[a][b]=k;
G[a].push_back(b);
G[b].push_back(a);
}
}
int BFS ()
{
for(int i=1;i<=n;++i)v[i]=0, t[i]=0;
q[1]=1;
v[1]=1;
int k, st=1, dr=1;
while (st<=dr)
{
k=q[st++];
for(vector<int>::iterator I=G[k].begin();I!=G[k].end();++I)
if (!v[*I] && c[k][*I]>f[k][*I])
{
v[*I]=1;
t[*I]=k;
if (*I==n)
return 1;
q[++dr]=*I;
}
}
return 0;
}
void EK ()
{
int fmin;
while (BFS())
{
fmin=INF;
for(int i=n;i!=1;i=t[i])
if (fmin>c[t[i]][i]-f[t[i]][i])
fmin=c[t[i]][i]-f[t[i]][i];
for(int i=n;t[i];i=t[i])
{
f[t[i]][i]+=fmin;
f[i][t[i]]-=fmin;
}
F+=fmin;
}
}
int main ()
{
read ();
EK ();
ofstream fout ("maxflow.out");
fout<<F;
return 0;
}