Pagini recente » Cod sursa (job #1713694) | Cod sursa (job #391869) | Cod sursa (job #618165) | Cod sursa (job #117711) | Cod sursa (job #273422)
Cod sursa(job #273422)
#include<fstream.h>
#define nx 220
#define inf 2000000
int cost[nx][nx],d[nx],tat[nx],cap[nx][nx];
int n,m,drum,s,S,D,flux[nx][nx];
int bellmanford()
{
int i,j,k,ok=0;
for (i=0;i<=D;++i)
d[i]=inf,tat[i]=-1;
d[S]=0;
for (k=0;k<=D && !ok;++k)
{
ok=1;
for (i=0;i<=D;++i)
for (j=0;j<=D;++j)
if (cap[i][j]>flux[i][j] && d[j]>d[i]+cost[i][j])
{
d[j]=d[i]+cost[i][j];
tat[j]=i;
ok=0;
}
}
if (tat[D]!=-1)
return 1;
return 0;
}
int Flux()
{
int rez=0,i,min=10000;
while (bellmanford())
{
s=0;min=10000;
for (i=D;i!=S;i=tat[i])
{
s+=cost[tat[i]][i];
if (cap[tat[i]][i]-flux[tat[i]][i]<min)
min=cap[tat[i]][i]-flux[tat[i]][i];
}
for (i=D;i!=S;i=tat[i])
{
flux[tat[i]][i]+=min;
flux[i][tat[i]]-=min;
}
rez+=s*min;
}
return rez;
}
int main()
{
ifstream be ("cc.in");
ofstream ki ("cc.out");
int i,j;
be>>n;
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
{
be>>cost[i][n+j];
cost[n+j][i]=-cost[i][n+j];
cap[i][n+j]=1;
}
be.close();
S=0,D=2*n+1;
for (i=1;i<=n;++i)
{
cost[n+i][D]=0;
cap[n+i][D]=1;
cost[S][i]=0;
cap[S][i]=1;
}
ki<<Flux()<<'\n';
ki.close();
return 0;
}