Pagini recente » Cod sursa (job #1095303) | Cod sursa (job #1249556) | Cod sursa (job #2652645) | Cod sursa (job #645892) | Cod sursa (job #2525419)
#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();
if(nod!=n)
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(viz[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();){
for(int j = 0; j< g[n].size(); j++){
fmin = 0x3f3f3f3f;
p[n] = g[n][j];
if(!viz[p[n]] || c[p[n]][n] == f[p[n]][n])
continue;
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;
}
flux += fmin;
}
}
_g << flux << "\n";
}