Pagini recente » Cod sursa (job #313469) | Cod sursa (job #2801355) | Cod sursa (job #2917614) | Cod sursa (job #2965818) | Cod sursa (job #2207574)
#include <iostream>
#include <bits/stdc++.h>
#define MAX_INF 9999999
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int C[1001][1001],F[1001][1001],viz[1001],tata[1001],n,m;
vector<int>H[1001];
queue<int>Q;
bool bfs()
{
viz[1]=1;
Q.push(1);
while(Q.size())
{
int nod=Q.front();
for(vector<int>::iterator i=H[nod].begin();i!=H[nod].end();i++)
{
if(C[nod][*i]==F[nod][*i] || viz[*i]==1) continue;
tata[*i]=nod;
viz[*i]=1;
Q.push(*i);
if(*i==n) return 1;
}
Q.pop();
}
return 0;
}
int main()
{
int i,a,b,c,flux=0,fmin;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>a>>b>>c;
H[a].push_back(b);
H[b].push_back(a);
C[a][b]+=c;
}
while(bfs())
{
fmin=MAX_INF;
for(i=n;i!=1;i=tata[i])
{
fmin=min(fmin,C[tata[i]][i]-F[tata[i]][i]);
}
for(i=n;i!=1;i=tata[i])
{
F[tata[i]][i]+=fmin;
F[i][tata[i]]-=fmin;
}
flux+=fmin;
memset(viz,0,sizeof(viz));
while(Q.size()) Q.pop();
}
fout<<flux;
}