Pagini recente » Cod sursa (job #205190) | Cod sursa (job #2927759) | Cod sursa (job #2879599) | Cod sursa (job #2969788) | Cod sursa (job #1333517)
#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int fmax,ma,q[1005],pr,ul,n,m,i,a,b,viz[1005],pred[1005],cap[1005][1005];
vector<int> v[1005];
int bfs()
{
int y,x;
memset(viz,0,sizeof(viz));
pr=1;
ul=1;
q[1]=1;
viz[1]=1;
while(pr<=ul)
{
x=q[pr++];
for(vector<int>::iterator it=v[x].begin();it!=v[x].end();it++)
{
y=*it;
if(cap[x][y]&&!viz[y])
{
q[++ul]=y;
pred[y]=x;
viz[y]++;
}
}
}
return viz[n];
}
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>b;
f>>cap[a][b];
v[a].push_back(b);
v[b].push_back(a);
}
while(bfs())
{
for(vector<int>::iterator it=v[n].begin();it!=v[n].end();it++)
{
a=*it;
b=a;
ma=cap[a][n];
if(cap[a][n])
{
while(b>1)
{
if(ma>cap[pred[b]][b])
ma=cap[pred[b]][b];
b=pred[b];
}
b=a;
cap[a][n]-=ma;
cap[n][a]+=ma;
while(b>1)
{
cap[pred[b]][b]-=ma;
cap[b][pred[b]]+=ma;
b=pred[b];
}
fmax+=ma;
}
}
}
g<<fmax<<'\n';
return 0;
}