Pagini recente » Cod sursa (job #1786689) | Cod sursa (job #1785481) | Cod sursa (job #2025396) | Cod sursa (job #177956) | Cod sursa (job #726869)
Cod sursa(job #726869)
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>
#define MAXN 1010
using namespace std;
vector<int>v[MAXN];
int n,m,F[MAXN][MAXN],C[MAXN][MAXN],p[MAXN],fmin,flux;
queue<int>Q;
bool bfs()
{
int x;
memset(p,0,sizeof(p));
Q.push(1); p[1]=1;
while(!Q.empty())
{
x=Q.front(); Q.pop();
for(int i=0;i<v[x].size();i++)
if(!p[v[x][i]] and F[x][v[x][i]]!=C[x][v[x][i]])
{
p[v[x][i]]=x;
Q.push(v[x][i]);
}
}
return (p[n]>0);
}
int main()
{
int i,x,y,z;
ifstream fi("maxflow.in");
ofstream fo("maxflow.out");
fi>>n>>m;
for(i=1;i<=m;i++)
{
fi>>x>>y>>z;
C[x][y]=z;
v[x].push_back(y);
v[y].push_back(x);
}
while(bfs())
for(x=0;x<v[n].size();x++)
if(p[v[n][x]] and C[v[n][x]][n]!=F[v[n][x]][n])
{
p[n]=v[n][x];
for(i=n,fmin=int(2e9);i!=1;i=p[i])
if(C[p[i]][i]-F[p[i]][i]<fmin) fmin=C[p[i]][i]-F[p[i]][i];
if(fmin<=0) continue;
for(i=n;i!=1;i=p[i])
{
F[p[i]][i]+=fmin;
F[i][p[i]]-=fmin;
}
flux+=fmin;
}
fo<<flux<<"\n";
return 0;
}