Pagini recente » Cod sursa (job #1632831) | Cod sursa (job #8409) | Cod sursa (job #1372441) | Cod sursa (job #3244945) | Cod sursa (job #1932987)
#include<bits/stdc++.h>
#define NMAX 1024
#define pb push_back
#define mp make_pair
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int c[NMAX][NMAX];
int f[NMAX][NMAX];
int parent[NMAX];
vector<int> g[NMAX];
bitset<NMAX> viz;
int n, m;
int BF()
{
viz.reset();
queue<int> Q;
Q.push(1);
viz[1] = 1;
for (;Q.size();Q.pop()) {
int nod = Q.front();
if (nod == n) continue;
for(auto q:g[nod]) {
if(c[nod][q]==f[nod][q]||viz[q]) continue;
viz[q]=1;
Q.push(q);
parent[q]=nod;
}
}
return viz[n];
}
int main()
{
int flow, fmin, x, y, z, nod;
fin>>n>>m;
for (int i = 1; i <= m; i++)
{
fin>>x>>y>>z;
c[x][y] += z;
g[x].pb(y);
g[y].pb(x);
}
for (flow = 0; BF();) for(auto q:g[n]) {
if(f[q][n]==c[q][n]||!viz[q]) continue;
parent[n]=q;
fmin=INF;
for(q=n;q!=1;q=parent[q]) {
fmin=min(fmin,c[parent[q]][q]-f[parent[q]][q]);
}
if(fmin==0) continue;
for(q=n;q!=1;q=parent[q]) {
f[parent[q]][q]+=fmin;
f[q][parent[q]]-=fmin;
}
flow+=fmin;
}
fout<<flow<<'\n';
return 0;
}