Pagini recente » Cod sursa (job #131674) | Cod sursa (job #2981854) | Cod sursa (job #2091644) | Cod sursa (job #1514955) | Cod sursa (job #582557)
Cod sursa(job #582557)
#include<fstream>
#include<queue>
#define maxn 1010
#define inf INT_MAX
using namespace std;
int v[maxn][maxn],a[maxn][maxn],viz[maxn];
int n,m;
queue<int> q;
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;
memset(viz,0,sizeof(viz));
while (!q.empty())
q.pop();
q.push(1);
while (!q.empty())
{
x=q.front();
q.pop();
for (i=1;i<=n;i++)
if (v[x][i]>a[x][i]&&!viz[i])
{
q.push(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';
}