Pagini recente » Cod sursa (job #59805) | Cod sursa (job #35600) | Cod sursa (job #59291) | Cod sursa (job #286383) | Cod sursa (job #3226217)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");
int capacitate[1005][1005];
vector <int> g[1005];
int n, m;
bool viz[1005];
bool return_dfs=false;
int dfs (int nod, int minflow)
{
viz[nod]=1;
if (nod==n) {
return_dfs=true;
return minflow;
}
for (int vecin : g[nod]) {
if (capacitate[nod][vecin]>0&&viz[vecin]==0) {
minflow=min(minflow, capacitate[nod][vecin]);
int mini=dfs(vecin, minflow);
//Luam in calcul doar minflow din drumul dinspre sursa -> destinatie, nu si restul
if (return_dfs) {
minflow=min(minflow, mini);
capacitate[nod][vecin]-=minflow;
capacitate[vecin][nod]+=minflow;
return minflow;
}
}
}
return 0; //Nu am mai gasit rute... Aia e
}
int maxFlow()
{
int flux=0;
while (true) {
int minflow=dfs(1, 1e9);
//cout<<minflow<<endl;
for (int i=1; i<=n; i++) viz[i]=0;
if (minflow==0) break;
flux+=minflow;
return_dfs=false;
}
return flux;
}
int main()
{
fin.tie(0); fin.sync_with_stdio(false);
int a, b, d; fin>>n>>m;
for (int i=1; i<=m; i++) {
fin>>a>>b>>d;
g[a].push_back(b);
g[b].push_back(a); //Muchiile reziduale;
capacitate[a][b]=d;
}
int flow=maxFlow();
fout<<flow;
return 0;
}