Pagini recente » Cod sursa (job #2480839) | Cod sursa (job #1892282) | Cod sursa (job #627601) | Cod sursa (job #1517909) | Cod sursa (job #2564941)
#include <bits/stdc++.h>
#define DIM 1010
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,i,x,y,z,nod,vecin,fluxmin,fluxtotal,t[DIM],cap[DIM][DIM],flux[DIM][DIM];
queue<int> q;
bitset<DIM> f;
vector<int> L[DIM];
int bfs() {
f.reset();
q.push(1), f[1]=1;
while (!q.empty()) {
int nod=q.front();
q.pop();
for (auto vecin:L[nod]) {
if (f[vecin]==0&&cap[nod][vecin]>flux[nod][vecin]) {
f[vecin]=1;
q.push(vecin);
t[vecin]=nod;
}
}
}
return f[n];
}
int main() {
fin>>n>>m;
for (i=1;i<=m;i++) {
fin>>x>>y>>z;
L[x].push_back(y);
L[y].push_back(x);
cap[x][y]=z;
}
while (bfs()) {
for (auto vecin:L[n]) {
if (f[vecin]==1&&cap[vecin][n]>flux[vecin][n]) {
fluxmin=cap[vecin][n]-flux[vecin][n];
nod=vecin;
while (nod!=1) {
fluxmin=min(fluxmin,cap[t[nod]][nod]-flux[t[nod]][nod]);
nod=t[nod];
}
fluxtotal+=fluxmin;
flux[vecin][n]+=fluxmin;
flux[n][vecin]-=fluxmin;
nod=vecin;
while (nod!=1) {
flux[t[nod]][nod]+=fluxmin;
flux[nod][t[nod]]-=fluxmin;
nod=t[nod];
}
}
}
}
fout<<fluxtotal;
return 0;
}