Pagini recente » Cod sursa (job #1519540) | Istoria paginii schimbare-borland/pachet | Cod sursa (job #987010) | Cod sursa (job #2347466) | Cod sursa (job #1937295)
#include <bits/stdc++.h>
#define INF 1000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,j,k,d[1005][1005],t[1005],f[1005][1005],q,c,x,y,z,fmn,flow;
bool viz[1005];
vector<int>v[1005];
queue<int>C;
void BFS()
{int i;
memset(viz,0,sizeof(viz));
q=1;
C.push(1);
viz[1]=1;
while(!C.empty())
{c=C.front();
C.pop();
for(i=0;i<v[c].size();i++)
{if(viz[v[c][i]]==0&&d[c][v[c][i]]!=f[c][v[c][i]]){viz[v[c][i]]=1;
t[v[c][i]]=c;
if(v[c][i]==n)break;
else C.push(v[c][i]);
}
}
}
while(!C.empty())
C.pop();
}
int main()
{int i;
fin>>n>>m;
for(i=1;i<=m;i++)
{fin>>x>>y>>z;
v[x].push_back(y);
v[y].push_back(x);
d[x][y]=z;
}
BFS();
while(viz[n]==1)
{q=n;fmn=INF;
while(q!=1)
{fmn=min(fmn,d[t[q]][q]-f[t[q]][q]);
q=t[q];
}
flow+=fmn;
q=n;
while(q!=1)
{f[t[q]][q]+=fmn;
f[q][t[q]]-=fmn;
q=t[q];
}
BFS();
}
fout<<flow;
}