Pagini recente » Cod sursa (job #2957391) | Cod sursa (job #3138427) | Cod sursa (job #3002762) | Cod sursa (job #2755920) | Cod sursa (job #560252)
Cod sursa(job #560252)
#include<fstream>
using namespace std;
int n,m,c[1005][1005],valflux,minim,d[1005],i,k,viz[1005],prim,ultim,coa[1005],tata[1005],j;
const int inf=1<<30;
typedef
struct nod
{
int nr;
nod *urm;
}*Pnod;
Pnod l[1005];
ofstream fout("maxflow.out");
void gaseste_dum()
{
for(i=1;i<=n;i++)
viz[i]=0;
prim=1;
ultim=1;
coa[1]=1;
viz[1]=1;
tata[1]=0;
k=0;
// Pnod p;
int x,aux;
while(prim<=ultim)
{
for(i=1;i<=n;i++)
if(viz[i]==0&&c[coa[prim]][i]>0)
{
coa[++ultim]=i;
viz[i]=1;
tata[i]=coa[prim];
if(i==n)
{
k=1;
d[1]=n;
x=n;
while(tata[x]!=0)
{
k++;
d[k]=tata[x];
x=tata[x];
}
for(j=1;j<=k/2;j++)
{
aux=d[j];
d[j]=d[k-j+1];
d[k-j+1]=aux;
}
return;
}
}
prim++;
}
}
void ford_fulk()
{
do
{
gaseste_dum();
if(k>0)
{
minim=c[d[1]][d[2]];
for(i=2;i<=k-1;i++)
if(c[d[i]][d[i+1]]<minim)
minim=c[d[i]][d[i+1]];
valflux=valflux+minim;
for(i=1;i<=k-1;i++)
{
c[d[i]][d[i+1]]=c[d[i]][d[i+1]]-minim;
c[d[i+1]][d[i]]=c[d[i+1]][d[i]]+minim;
}
}
}while(k!=0);
fout<<valflux;
}
int main()
{
ifstream fin("maxflow.in");
fin>>n>>m;
Pnod p;
int i,j,cost;
//s=1;
//d=n;
ofstream fout("maxflow.out");
while(fin>>i>>j>>cost)
{
p=new(nod);
p->nr=j;
p->urm=l[i];
l[i]=p;
c[i][j]=cost;
p=new(nod);
p->nr=i;
p->urm=l[j];
l[j]=p;
}
fin.close();
ford_fulk();
return 0;
}