Pagini recente » Cod sursa (job #2024297) | Cod sursa (job #1773838) | Cod sursa (job #2743240) | Cod sursa (job #691817) | Cod sursa (job #1448)
Cod sursa(job #1448)
#include<fstream.h>
int long d[204],pre[204],i,j,m[204][204],c[204][204],n,flux,min,nr;
void drum()
{memset(d,0,sizeof(d));
memset(pre,0,sizeof(pre));
int i,j,k;
// for(i=1;i<=n+1;i++)
// {d[i]=m[1][i];
// pre[i]=1;
// d[i+n]=d[i]+m[i][i+n];
// pre[i+n]=i;
// }
for(i=n+2;i<=2*n+2;i++)
d[i]=-1000;
for(i=2;i<=n+1;i++)
{pre[i]=1;
if(!c[1][i])
d[i]=1000;
}
for(i=1;i<=n+2;i++)
for(j=1;j<=2*n+2;j++)
{if(j<n+2)
{for(k=n+2;k<=2*n+1;k++)
if(c[j][k]&&((d[k]>d[j]+m[j][k])||(d[k]==-1000)))
{d[k]=d[j]+m[j][k];
pre[k]=j;
}
}
else
{for(k=1;k<=n+1;k++)
if(c[j][k]&&((d[k]>d[j]+m[j][k])||(d[k]==-1000)))
{d[k]=d[j]+m[j][k];
pre[k]=j;
}
k=2*n+2;
if(c[j][k]&&((d[k]>d[j]+m[j][k])||(d[k]==-1000)))
{d[k]=d[j]+m[j][k];
pre[k]=j;
}
}
}}
int main()
{ifstream f("cc.in");
f>>n;
for(i=2;i<=n+1;i++)
for(j=n+2;j<=n*2+1;j++)
{f>>m[i][j];
c[i][j]=1;
}
for(i=2;i<=n+1;i++)
c[1][i]=1;
for(j=n+2;j<=n*2+1;j++)
c[j][2*n+2]=1;
while(flux<n)
{drum();
for(i=2*n+2,min=20;pre[i]>=1;i=pre[i])
if(c[pre[i]][i]<min)
min=c[pre[i]][i];
for(i=2*n+2;pre[i]>=1;i=pre[i])
{c[i][pre[i]]+=min;
c[pre[i]][i]-=min;
if(m[pre[i]][i])
m[i][pre[i]]=(-1)*m[pre[i]][i];
}
flux+=min;
nr+=d[2*n+2];
}
ofstream g("cc.out");
g<<nr;
g.close();
return 0;
}