Pagini recente » Cod sursa (job #1503309) | Cod sursa (job #947974) | Cod sursa (job #3267652) | Cod sursa (job #195705) | Cod sursa (job #1980938)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define INF 0x3f3f3f3f
#define MAXN 1030
using namespace std;
vector<int> lista[MAXN];
int n, m;
bool vizitat[MAXN];
int tata[MAXN];
int flow[MAXN][MAXN], cap[MAXN][MAXN];
void read(){
fstream f("maxflow.in",ios::in);
int a, b, c, i, j;
f >> n >> m;
while(f >> a >> b >> c){
lista[a].push_back(b);
lista[b].push_back(a);
flow[a][b] = c;
}
}
void set_tata(){
for(int i = 1;i <= n; ++i)
tata[i] = 0;
}
int BFS(){
queue<int> q;
q.push(1);
while(!q.empty()){
int nod = q.front();
int len = lista[nod].size();
q.pop();
for(int i = 0;i < len; ++i)
if(!tata[lista[nod][i]] && flow[nod][lista[nod][i]] > 0){
tata[lista[nod][i]] = nod;
q.push(lista[nod][i]);
}
}
return tata[n];
}
void solve(){
int minim, total = 0, x;
while(BFS()){
int len = lista[n].size();
for(int i = 0;i < len; ++i){
minim = flow[lista[n][i]][n];
for(x = lista[n][i];x != 1;x = tata[x])
minim = min(minim,flow[tata[x]][x]);
for(x = lista[n][i];x != 1; x = tata[x]){
flow[tata[x]][x] = flow[tata[x]][x] - minim;
flow[x][tata[x]] = flow[x][tata[x]] + minim;
}
flow[tata[n]][n] = flow[tata[n]][n] - minim;
flow[n][tata[n]] = flow[n][tata[n]] + minim;
total += minim;
}
set_tata();
}
fstream g("maxflow.out",ios::out);
g << total;
}
int main(){
read();
solve();
return 0;
}