Pagini recente » Cod sursa (job #2810089) | Cod sursa (job #1598527) | Cod sursa (job #649831) | Cod sursa (job #2832767) | Cod sursa (job #1937161)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
queue <int> q;
vector <int> v[1010];
int n,m,i,j,flux,minf,c[1010][1010],f[1010][1010],s,t,p[1010];
bool viz[1010];
void getAP()
{
q.push(s);
viz[s]=1;
while (!q.empty())
{
int x=q.front();
q.pop();
for (i=0; i<v[x].size(); i++)
{
int vecin=v[x][i];
if (!viz[vecin]&&c[x][vecin]-f[x][vecin]>0)
q.push(vecin),viz[vecin]=1,p[vecin]=x;
}
}
}
int main()
{
fin >> n >> m;
s=1;
t=n;
for (i=1; i<=m; i++)
{
int a,b,cap;
fin >> a >> b >> cap;
v[a].push_back(b);
v[b].push_back(a);
c[a][b]=cap;
}
while (1)
{
for (i=1; i<=n; i++)
viz[i]=0,p[i]=-1;
getAP();
if (p[t]==-1)
break;
int nod=t,fmin=200000000;
while (nod!=s)
{
fmin=min(fmin,c[p[nod]][nod]-f[p[nod]][nod]);
nod=p[nod];
}
nod=t;
while (nod!=s)
{
f[p[nod]][nod]+=fmin;
f[nod][p[nod]]-=fmin;
nod=p[nod];
}
flux+=fmin;
}
fout << flux << '\n';
}