Pagini recente » Cod sursa (job #2507647) | Cod sursa (job #2120375) | Cod sursa (job #2566356) | Cod sursa (job #2469479) | Cod sursa (job #2579572)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
vector <int> g[1001];
int n, m;
int c[1001][1001], f[1001][1001];
int viz[1001],p[1001];
queue <int>Q;
void citire()
{ int x,y,capacitate;
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>x>>y>>capacitate;
g[x].push_back(y);
g[y].push_back(x);
c[x][y]=capacitate;
}
}
void bfs()
{
Q.push(1);
for(int i=1;i<=n;i++)
viz[i]=0;
viz[1]=1;
while(!Q.empty())
{
int nod=Q.front();
Q.pop();
if(nod == n)
continue;
for(auto &v:graph[nod])
{
if(c[nod][v] == f[nod][v] || viz[v])
continue;
viz[v]=1;
tata[v]=nod;
Q.push(v);
}
}
return viz[n];
}
int main()
{
citire();
int flux,fluxmin;
for(flux=0;bfs();)
{
for(auto &i:graph[n])
{
fluxmin=inf;
if(!viz[i] || c[i][n]==f[i][n])
continue;
p[n]=i;
for(int j=n;j!=1;j=p[j])
fluxmin=min(fluxmin,c[p[j]][j]-f[p[j]][j])
for(int j=n;j!=1;j=p[j])
{
f[p[j]][j]+=fluxmin;
f[j][p[j]]-=fmin;
}
flux+=fmin;
}
}
cout<<flux<<" ";
return 0;
}