Pagini recente » Cod sursa (job #158458) | Cod sursa (job #2369576) | Cod sursa (job #2860987) | Cod sursa (job #1142290) | Cod sursa (job #2207601)
#include<bits/stdc++.h>
using namespace std;
//ifstream f("in.txt");
//ofstream g("out.txt");
int n, m, capacitate[1001][1001], flux[1001][1001], tt[1001], i;
vector<int> a[1001];
inline int minim(int a, int b){if (a<=b) return a; else return b;}
bool bfs(){
int poz;
bool viz[n+1]; for (int i=1;i<=n;++i) viz[i]=false;
deque<int> coada;
vector<int>::iterator it;
viz[1]=true; coada.push_back(1);
while (!coada.empty()){
poz=coada.front(); coada.pop_front();
for (it=a[poz].begin();it!=a[poz].end();++it) if (!viz[*it] && capacitate[poz][*it]!=flux[poz][*it]){
tt[*it]=poz;
if (*it==n) return true;
viz[*it]=true;
coada.push_back(*it);
}
}
return false;
}
int main(){
int val, sol=0, fcrt, x, y;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d", &n, &m);
for (i=1;i<=m;i++) {
scanf("%d%d%d", &x, &y, &val);
a[x].push_back(y);
a[y].push_back(x);
capacitate[x][y]+=val;
}
while (bfs()){
fcrt=999999999;
for (i=n;i!=1;i=tt[i])
fcrt=minim(fcrt, capacitate[tt[i]][i]-flux[tt[i]][i]);
for (i=n;i!=1;i=tt[i]) {
flux[tt[i]][i]+=fcrt;
flux[i][tt[i]]-=fcrt;
}
sol+=fcrt;
}
printf("%d\n", sol);
return 0;
}