Pagini recente » Cod sursa (job #1054315) | Cod sursa (job #51054) | Cod sursa (job #1708393) | Cod sursa (job #908375) | Cod sursa (job #2525244)
#include <bits/stdc++.h>
using namespace std;
vector<int> g[1001];
int c[1001][1001]={0}, f[1001][1001]={0};
int n, m;
int p[1001]={0};
bool viz[1001];
bool bfs(){
queue<int> q;
q.push(1);
memset(viz, false, sizeof(viz));
viz[1] = true;
while(!q.empty()){
int nod = q.front();
q.pop();
for(int i=0; i<g[nod].size(); i++){
int adi = g[nod][i];
if(viz[adi] || f[nod][adi] == c[nod][adi])
continue;
viz[adi] = true;
q.push(adi);
p[adi] = nod;
if(adi == n)
return true;
}
}
return false;
}
int main()
{
int i, a, b, cmax;
ifstream _f("maxflow.in");
ofstream _g("maxflow.out");
_f >> n >> m;
for(i=1; i<=m; i++){
_f >> a >> b >> cmax;
g[a].push_back(b);
g[b].push_back(a);
c[a][b] = cmax;
}
int flux, fmin;
for(flux=0; bfs(); flux+=fmin){
fmin = 0x3f3f3f3f;
for(int nod = n; nod!=1; nod = p[nod]){
fmin = min(fmin, c[p[nod]][nod] - f[p[nod]][nod]);
}
for(int nod = n; nod!=1; nod = p[nod]){
f[p[nod]][nod] += fmin;
f[nod][p[nod]] -= fmin;
}
}
_g << flux << "\n";
}