Pagini recente » Cod sursa (job #1601832) | Cod sursa (job #2060545) | Cod sursa (job #152290) | Cod sursa (job #148249) | Cod sursa (job #420210)
Cod sursa(job #420210)
#include<fstream>
#include<cstdio>
#include<vector>
#define MAX 1004
#define pb push_back
#define INFI 1000000000
using namespace std;
int cap[MAX][MAX],fluxmax,n, t[MAX];
void citire()
{
int m,i;
ifstream fin("maxflow.in");
fin>>n>>m;
for(i=1;i<=m;i++)
{
int x,y,z;
fin>>x>>y>>z;
cap[x][y]=z;
}
}
int bfs(int start, int end)
{
int st,dr,j,k,gata=0;
vector<int> coada;
coada.pb(start);
st=dr=0;
for(j=1;j<=n;j++)
t[j]=-1;
t[start]=0;
while(st<=dr && !gata)
{
k=coada[st++];
for(j=1;j<=n;j++)
if(t[j]==-1 && cap[k][j])
{
coada.pb(j);
dr++;
t[j]=k;
if(j==end)
gata=1;
}
}
coada.clear();
return gata;
}
void edm_karp()
{
int cmin,v,k;
while(bfs(1,n))
{
cmin=INFI;
for(k=n, v=t[n] ; t[k]; k=t[k], v=t[v])
if(cap[v][k]<cmin)
cmin=cap[v][k];
fluxmax+=cmin;
for(k=n, v=t[n] ; t[k]; k=t[k], v=t[v])
{
cap[v][k]-=cmin;
cap[k][v]+=cmin;
}
}
}
int main()
{
freopen("maxflow.out","w",stdout);
citire();
edm_karp();
printf("%d", fluxmax);
return 0;
}