Pagini recente » Cod sursa (job #1430521) | Cod sursa (job #1627528) | Autor necunoscut | Istoria paginii runda/penultimainaintedeotv/clasament | Cod sursa (job #372822)
Cod sursa(job #372822)
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<vector>
#define pb push_back
#define mp make_pair
using namespace std;
vector <int> v[1001];
int cap[1001][1001],prev[1001],n;
int bf()
{
int coada[1000],viz[1001],tail,head,nod,i,nod1;
tail=0;
head=1;
coada[tail]=1;//bag sursa in coada
memset(viz,0,1001*sizeof(int));
viz[1]=1;//marchez sursa ca vizitata
prev[1]=-1;
while(tail!=head)
{
nod=coada[tail];
tail++;
for(i=0;i<(int) v[nod].size();i++)
{
nod1=v[nod][i];
if(viz[nod1]==0 && cap[nod][nod1]>0)
{
viz[nod1]=1;
coada[head++]=nod1;
prev[nod1]=nod;
}
}
}
if(viz[n]==1)
return 1;
return 0;
}
int flux_maxim()
{
int flux=0,cmin=110001,nod=n,nod1;
while(bf())
{
while(prev[nod]!=-1)
{
nod1=prev[nod];
if(cap[nod1][nod]<cmin)
cmin=cap[nod1][nod];
nod=nod1;
}
nod=n;
while(prev[nod]!=-1)
{
nod1=prev[nod];
cap[nod1][nod]+=cmin;
cap[nod][nod1]-=cmin;
nod=nod1;
}
flux+=cmin;
}
return flux;
}
int main()
{
int m,x,y,c,i;
FILE *f=fopen("maxflow.in","r");
fscanf(f,"%i%i",&n,&m);
for(i=0;i<m;i++)
{
fscanf(f,"%i%i%i",&x,&y,&c);
v[x].pb(y);
v[y].pb(x);
cap[x][y]=c;
cap[y][x]=0;
}
fclose(f);
f=fopen("maxflow.out","w");
fprintf(f,"%i\n",flux_maxim());
fclose(f);
return 0;
}