Pagini recente » Cod sursa (job #3286554) | Cod sursa (job #1595249) | Cod sursa (job #3200324) | Cod sursa (job #2390178) | Cod sursa (job #2380244)
#include <iostream>
#include <fstream>
#include <bitset>
#include <vector>
#include <queue>
#include <climits>
#include <algorithm>
using namespace std;
ifstream f1("maxflow.in");
ofstream f2("maxflow.out");
int capacity[1005][1005], flowPipe[1005][1005], parent[1005];
vector<int> leg[1005];
bitset<1005> viz;
queue<int> q;
int n,m;
void citire(){
int x,y,z;
f1>>n>>m;
for(int i=0;i<m;i++){
f1>>x>>y>>z;
leg[x].push_back(y);
leg[y].push_back(x);
capacity[x][y]=z;
}
}
int bfs(){
q.push(1);
viz.reset();
viz[1]=true;
int nod;
while(!q.empty()){
nod=q.front();
q.pop();
if(nod==n) break;
for(int &vecin:leg[nod]){
if(!viz[vecin] && capacity[nod][vecin]!=flowPipe[nod][vecin]){
parent[vecin]=nod;
viz[vecin]=true;
q.push(vecin);
}
}
}
while(!q.empty())
q.pop();
return viz[n];
}
void edmonKartagio(){
int flow = 0;
while(bfs()){
int min_flow = INT_MAX;
for(int nod=n;nod!=1;nod=parent[nod]){
min_flow = min(min_flow, capacity[parent[nod]][nod]-flowPipe[parent[nod]][nod]);
}
for(int nod=n;nod!=1;nod=parent[nod]){
flowPipe[parent[nod]][nod]+=min_flow;
flowPipe[nod][parent[nod]]-=min_flow;
}
flow +=min_flow;
}
f2<<flow;
}
int main() {
citire();
edmonKartagio();
return 0;
}