Pagini recente » Cod sursa (job #2403269) | Cod sursa (job #2946050) | Cod sursa (job #682420) | Cod sursa (job #1841425) | Cod sursa (job #1380086)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
#define NMax 1005
#define inf 2100000000
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int n,m;
int C[NMax][NMax], F[NMax][NMax];
vector<int> v[NMax];
queue<int> cd;
int ant[NMax];
bool viz[NMax];
bool BFS()
{
int i, s = 1;
cd.push(s);
for(i=1;i<=n;++i) ant[i] = 0, viz[i] = false;
viz[s] = true;
while(!cd.empty())
{
s = cd.front(); cd.pop();
if(s == n) continue;
for(i=0;i<v[s].size();++i) if(!viz[v[s][i]] && F[s][v[s][i]] < C[s][v[s][i]])
{
viz[v[s][i]] = true;
ant[v[s][i]] = s;
cd.push(v[s][i]);
}
}
return viz[n];
}
int main()
{
int i,a,b,c;
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>a>>b>>c;
v[a].push_back(b);
v[b].push_back(a);
C[a][b] = c;
}
int nod, flowmin, flow = 0;
while(BFS()) for(i=0;i<v[n].size();++i)
{
flowmin = inf;
ant[n] = v[n][i];
nod = n;
while(nod != 1)
{
flowmin = min(flowmin,C[ant[nod]][nod]-F[ant[nod]][nod]);
nod = ant[nod];
}
nod = n;
while(nod != 1)
{
F[ant[nod]][nod] += flowmin;
F[nod][ant[nod]] -= flowmin;
nod = ant[nod];
}
flow += flowmin;
}
g<<flow<<"\n";
f.close();
g.close();
return 0;
}