Pagini recente » Cod sursa (job #1444014) | Cod sursa (job #1477070) | Cod sursa (job #1976490) | Cod sursa (job #1208591) | Cod sursa (job #1930654)
#include <bits/stdc++.h>
#define NMAX 1024
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int c[NMAX][NMAX],f[NMAX][NMAX],parent[NMAX];
vector<int> g[NMAX];
int n,m,flow,flowMin;
bool BF() {
int i,j,nod,v;
queue<int> Q;
bitset<NMAX> vis;
Q.push(1);
vis[1]=1;
for(;Q.size();Q.pop()) {
int nod=Q.front();
for(auto q:g[nod]) {
if(c[nod][q]==f[nod][q]||vis[q]) continue;
vis[q]=1;
Q.push(q);
parent[q]=nod;
if(q==n) return 1;
}
}
return 0;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++) {
int x,y,z;
fin>>x>>y>>z;
c[x][y]=z;
g[x].push_back(y);
g[y].push_back(x);
}
for(flow=0;BF();flow+=flowMin) {
flowMin=INF;
for(int nod=n;nod!=1;nod=parent[nod]) {
flowMin = min(flowMin, c[parent[nod]][nod]-f[parent[nod]][nod]);
}
for(int nod=n;nod!=1;nod=parent[nod]) {
f[parent[nod]][nod] += flowMin;
f[nod][parent[nod]] -= flowMin;
}
}
fout<<flow;
return 0;
}