Pagini recente » Cod sursa (job #2748934) | Cod sursa (job #2182096) | Cod sursa (job #2039903) | Cod sursa (job #2870402) | Cod sursa (job #1120310)
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
vector <int> a[1005];
int n1,n2,q[1000005],pr,ul,flow,fmax,v[1005][1005],viz[1005],pred[1005],i,j,n,m,x,y,c;
int bfs()
{
memset(viz,0,sizeof(viz));
q[1]=1;
pr=1;
ul=1;
viz[1]++;
while(pr<=ul)
{
n1=q[pr++];
if(n1!=n)
{
for(vector<int>::iterator it=a[n1].begin();it!=a[n1].end();it++)
{
n2=*it;
if(!viz[n2]&&v[n1][n2])
{
viz[n2]=1;
pred[n2]=n1;
q[++ul]=n2;
}
}
}
}
return viz[n2];
}
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
a[x].push_back(y);
a[y].push_back(x);
v[x][y]=c;
}
while(bfs())
{
n1=n;
for(vector<int>::iterator it=a[n1].begin();it!=a[n1].end();it++)
{
n2=*it;
if(v[n2][n1])
{
y=v[n2][n1];
x=n2;
while(pred[n2])
{
if(y>v[pred[n2]][n2])
y=v[pred[n2]][n2];
n2=pred[n2];
}
n2=x;
v[n2][n1]-=y;
v[n1][n2]+=y;
while(pred[n2])
{
v[pred[n2]][n2]-=y;
v[n2][pred[n2]]+=y;
n2=pred[n2];
}
fmax+=y;
}
}
}
g<<fmax<<'\n';
return 0;
}