Pagini recente » Cod sursa (job #2619416) | Cod sursa (job #2890758) | Cod sursa (job #936627) | Cod sursa (job #1885926) | Cod sursa (job #2153675)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
#define NMAX 1005
int c[NMAX][NMAX], f[NMAX][NMAX];
int parent[NMAX];
vector<int> graf[NMAX];
bitset<NMAX> viz;
int n,m;
bool BF()
{
viz.reset();
queue<int> Q;
Q.push(1);
for(;Q.size();Q.pop())
{
int nod=Q.front();
if(nod==n) continue;
viz[nod]=1;
for(auto q:graf[nod])
{
if(f[nod][q]==c[nod][q]||viz[q]) continue;
viz[q]=1;
Q.push(q);
parent[q]=nod;
}
}
return viz[n];
}
int main()
{
int flow,fmin;
fin>>n>>m;
for(int i=0;i<m;i++)
{
int x,y,z;
fin>>x>>y>>z;
c[x][y]+=z;
graf[x].push_back(y);
graf[y].push_back(x);
}
for(flow=0; BF();)
{
for(auto q:graf[n])
{
if(f[q][n]==c[q][n]||!viz[q]) continue;
fmin=INT_MAX;
parent[n]=q;
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;
return 0;
}