Pagini recente » Cod sursa (job #972415) | Cod sursa (job #657570) | Cod sursa (job #431744) | Cod sursa (job #834545) | Cod sursa (job #2210045)
#include <bits/stdc++.h>
#define NMAX 1005
#define MMax 5005
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
vector <int> v[NMAX];
int p[NMAX];
int f[NMAX][NMAX];
int n,m;
bool viz[NMAX];
bool bfs() {
for(int i=1;i<=n;i++) {
viz[i]=0;
p[i]=0;
}
queue <int> Q;
Q.push(1);
viz[1]=1;
while(!Q.empty()) {
int nod = Q.front();
Q.pop();
for(auto vec:v[nod])
if(!viz[vec]&&f[nod][vec]>0)
{
p[vec]=nod;
viz[vec]=1;
Q.push(vec);
}
}
if(!viz[n])
return false;
return true;
}
int main()
{
int x,y,c;
int flux=0;
in>>n>>m;
for(int i=1;i<=m;i++) {
in>>x>>y>>c;
f[x][y]+=c;
v[x].push_back(y);
v[y].push_back(x);
}
while(bfs())
for(auto c1:v[n])
{
if(!viz[c1]||f[c1][n]<=0)
continue;
int mini=(1<<30);
p[n]=c1;
for(int nod=n;nod!=1;nod=p[nod]) {
mini=min(mini,f[p[nod]][nod]);
}
for(int nod=n;nod!=1;nod=p[nod]) {
f[p[nod]][nod]-=mini;
f[nod][p[nod]]+=mini;
}
flux+=mini;
}
out<<flux<<'\n';
return 0;
}