Pagini recente » Cod sursa (job #2937343) | Cod sursa (job #1884917) | Cod sursa (job #1664775) | Cod sursa (job #2940333) | Cod sursa (job #2663370)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector <int>l[1005];
bool ok,v[1005];
int n,m,t[1005],cp[1005][1005],f[1005][1005],c[1005];
void bfs()
{
for (int i=0;i<=1005;i++) v[i]=0;
v[1]=1;
c[1]=1;
int dr=1;
int st=1;
while (st<=dr)
{
int x=c[st];
for (int j=0;j<l[x].size();j++)
{
int vec=l[x][j];
if(v[vec]==0 && f[x][vec]<cp[x][vec])
{
v[vec]=1;
dr++;
c[dr]=vec;
t[vec]=x;
if (vec==n)
{
ok=1;
return ;
}
}
}
st++;
}
}
int i,j,x,y,cap,ad,af;
int main()
{
fin >> n >> m;
for (i=1;i<=m;i++)
{
fin >> x >> y >> cap;
l[x].push_back(y);
l[y].push_back(x);
cp[x][y]=cap;
}
ok=1;
while (ok==1)
{
ok=0;
bfs();
ad=cp[t[n]][n]-f[t[n]][n];
x=n;
while (t[x]!=0)
{
if (cp[t[x]][x]-f[t[x]][x]<ad) ad=cp[t[x]][x]-f[t[x]][x];
x=t[x];
}
af+=ad;
x=n;
while (t[x]!=0)
{
f[t[x]][x]+=ad;
f[x][t[x]]-=ad;
x=t[x];
}
}
fout << af;
return 0;
}