Pagini recente » Cod sursa (job #3236199) | Cod sursa (job #1115784) | Cod sursa (job #88595) | Cod sursa (job #402345) | Cod sursa (job #2469404)
#include<fstream>
#include <bitset>
#include<vector>
#include <deque>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,nod,s,minim,x,y,k;
int C[1001][1001],flux[1001][1001];
int T[1001];
vector <int> v[1001];
bitset <1001> f;
deque <int> coada;
int bfs(){
f.reset();
coada.push_back(1);
f[1]=1;
while(!coada.empty()){
for(int i=0;i<v[coada.front()].size();i++){
nod=v[coada.front()][i];
if(!f[nod] && C[coada.front()][nod]-flux[coada.front()][nod]>0){
f[nod]=1;
T[nod]=coada.front();;
coada.push_back(nod);
}
}
coada.pop_front();
}
return f[n];
}
int main(){
fin>>n>>m;
for(int i=1;i<=m;i++){
fin>>x>>y>>k;
v[x].push_back(y);
v[y].push_back(x);
C[x][y]=k;
}
while(bfs()){
nod=n;
minim=200000000;
while(nod!=1){
minim=min(minim,C[T[nod]][nod]-flux[T[nod]][nod]);
nod=T[nod];
}
nod=n;
while(nod!=1){
flux[T[nod]][nod]+=minim;
flux[nod][T[nod]]-=minim;
nod=T[nod];
}
s+=minim;
}
fout<<s;
return 0;
}