Pagini recente » Cod sursa (job #2787466) | Cod sursa (job #2001152) | Cod sursa (job #2338863) | Cod sursa (job #2976985) | Cod sursa (job #2960520)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int capacity[1001][1001];
int m,nod1,nod2,capacitate,i,n;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
vector<vector<int>>adj;
int bfs(int start,int final,vector<int>&parent){
for(int i=0;i<parent.size();i++)
parent[i]=-1;
queue<pair<int,int>> q;
parent[start]=-2;
q.push({start,110001});
while(!q.empty()){
int curent=q.front().first;
int flow=q.front().second;
q.pop();
for(auto element:adj[curent]){
if(parent[element]==-1 && capacity[curent][element]){
parent[element]=curent;
int new_flow=min(flow,capacity[curent][element]);
if(element==final)
return new_flow;
q.push({element,new_flow});
}
}
}
return 0;
}
int max_flow(int start,int final ){
int maxflow=0;
vector<int>parent(n+1);
int flow;
while(bfs(start,final,parent)){
maxflow=maxflow+flow;
int curent=final;
while(curent!=start){
int prev=parent[curent];
capacity[curent][prev]=capacity[curent][prev]+flow;
capacity[prev][curent]=capacity[curent][prev]-flow;
curent=prev;
}
}
return maxflow;
}
int main() {
cin>>n>>m;
adj.resize(n+1);
for(i=1;i<=m;i++){
cin>>nod1>>nod2>>capacitate;
capacity[nod1][nod2]=capacitate;
adj[nod1].push_back(nod2);
adj[nod2].push_back(nod1);
}
cout<<max_flow(1,n);
}