Pagini recente » Cod sursa (job #2923961) | Cod sursa (job #3283666) | Cod sursa (job #1185273) | Istoria paginii runda/summer2020/clasament | Cod sursa (job #696065)
Cod sursa(job #696065)
#include<stdio.h>
#include<cstring>
using namespace std;
FILE *f,*g;
int n,m,cap[1002][1002],flux[1002][1002],viz[1002],cd[1002],t[1002];
struct nod
{
int v;
nod *adresa;
};
nod *a[1002];
void adaug(int x,int y)
{
nod *p;
p=new nod;
p->v=y;
p->adresa=a[x];
a[x]=p;
p=new nod;
p->v=x;
p->adresa=a[y];
a[y]=p;
}
void citire()
{
int i,x,y,c;
f=fopen("maxflow.in","rt");
fscanf(f,"%d %d",&n,&m);
memset(a,0,sizeof(a));
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&x,&y,&c);
cap[x][y]=c;
adaug(x,y);
}
fclose(f);
}
int vmin(int x,int y)
{
return(x<y)?x:y;
}
int bf()
{
nod *q;
int p,u,nod;
cd[1]=1;
memset(viz,0,sizeof(viz));
viz[1]=1;
u=1; p=1;
while(p<=u)
{
nod=cd[p];
for(q=a[cd[p]];q!=0;q=q->adresa)
{
if(cap[nod][q->v] == flux[nod][q->v] || viz[q->v]==1)
continue;
u++;
viz[q->v]=1;
cd[u]=q->v;
t[q->v]=nod;
if(q->v==n)
return 1;
}
p++;
}
return 0;
}
int main()
{
int s,i,fmin;
citire();
s=0;
while(bf()!=0)
{
fmin=10000000;
for(i=n;i!=1;i=t[i])
fmin=vmin(fmin,cap[t[i]][i]-flux[t[i]][i]);
for(i=n;i!=1;i=t[i])
{
flux[t[i]][i]+=fmin;
flux[i][t[i]]-=fmin;
}
s=s+fmin;
}
g=fopen("maxflow.out","wt");
fprintf(f,"%d",s);
fclose(g);
return 0;
}