Pagini recente » Cod sursa (job #645647) | Cod sursa (job #728164) | Cod sursa (job #42510) | Cod sursa (job #1884905) | Cod sursa (job #623586)
Cod sursa(job #623586)
#include<fstream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
ofstream g("maxflow.out");
vector<vector<int> > mat(1001);
int f[1001][1001],cap[1001][1001],up[1001],n,m;
inline int bfs(int s, int d)
{
int i,x,xx;
queue<int> q;
memset(up,-1,sizeof(up));
q.push(s);
up[s]=0;
while(!q.empty())
{
xx=q.front();
for(i=0;i<mat[xx].size();++i)
{
x=mat[xx][i];
if(up[x]==-1 && f[xx][x]<cap[xx][x])
{
q.push(x);
up[x]=xx;
if(x==d)
return 1;
}
}
q.pop();
}
return 0;
}
void flux()
{
int i,r,c=0,j;
while(bfs(1,n))
{
for(i=1;i<n;++i)
if(up[i]!=-1 && f[i][n]<cap[i][n])
{
r=cap[i][n]-f[i][n];
for(j=i;j!=1 && r>0; j=up[j])
r=min(r,cap[up[j]][j]-f[up[j]][j]);
if(r==0)
continue;
f[i][n]+=r;
f[n][i]-=r;
for(j=i;j!=1;j=up[j])
{
f[up[j]][j]+=r;
f[j][up[j]]-=r;
}
c+=r;
}
}
g<<c;
}
int main()
{
ifstream f("maxflow.in");
f>>n>>m;
int i,j;
for(;m;--m)
{
f>>i>>j;
mat[i].push_back(j);
mat[j].push_back(i);
f>>cap[i][j];
}
flux();
}