Pagini recente » Cod sursa (job #266375) | Cod sursa (job #1366012) | Cod sursa (job #580732) | Cod sursa (job #2757413) | Cod sursa (job #582580)
Cod sursa(job #582580)
#include<fstream>
#define maxn 1002
#define inf 0x3f3f3f3f
using namespace std;
int v[maxn][maxn],a[maxn][maxn],viz[maxn];
int n,m;
int q[maxn];
void citire()
{
int i,x,y,c;
ifstream in("maxflow.in");
in>>n>>m;
for (i=1;i<=m;i++)
{
in>>x>>y>>c;
v[x][y]+=c;
}
in.close();
}
int bfs()
{
int x,i,pi=1,ps=1;
memset(viz,0,sizeof(viz));
/*while (!q.empty())
q.pop();*/
q[1]=1;
while (pi<=ps)
{
x=q[pi];
pi++;
for (i=1;i<=n;i++)
if (v[x][i]>a[x][i]&&!viz[i])
{
q[++ps]=i;
viz[i]=x;
}
if (viz[n])
return 1;
}
return 0;
}
int flux()
{
int i,mn=inf,f=0;
while (bfs())
{
for (i=n;i!=1;i=viz[i])
if (v[viz[i]][i]-a[viz[i]][i]<mn)
mn=v[viz[i]][i]-a[viz[i]][i];
for (i=n;i!=1;i=viz[i])
{
a[viz[i]][i]+=mn;
a[i][viz[i]]-=mn;
}
f+=mn;
}
return f;
}
int main()
{
citire();
ofstream out("maxflow.out");
out<<flux()<<'\n';
}