Pagini recente » Cod sursa (job #1420584) | Cod sursa (job #392423) | Cod sursa (job #225256) | Rating Ablachim Mert-Kayhan (kayhy2323) | Cod sursa (job #282559)
Cod sursa(job #282559)
using namespace std;
#include<cstdio>
#include<queue>
#define inf 0x3f3f3f3f
int cost[202][202],f[202][202],cap[202][202],n,s=0,des,t[202],inq[202],d[202];
queue<int>Q;
void read()
{
int i,j;
freopen("cc.in","r",stdin);
scanf("%d",&n);
des=2*n+1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&cost[i][n+j]);
cost[n+j][i]=-cost[i][n+j];
cap[i][n+j]=1;
}
for(i=1;i<=n;i++)
{
cap[0][i]=1;
cap[n+i][des]=1;
}
}
int bellman()
{
int i,x;
for(i=0;i<=2*n+2;i++) {inq[i]=0;t[i]=-1;d[i]=inf; }
Q.push(s);
inq[s]=1;
t[s]=0;
d[s]=0;
while(!Q.empty())
{
x=Q.front();
Q.pop();
inq[x]=0;
for(i=1;i<=2*n+1;i++)
if(f[x][i]<cap[x][i] && d[i]>d[x]+cost[x][i])
{
d[i]=d[x]+cost[x][i];
t[i]=x;
if(!inq[i])
{
inq[i]=1;
Q.push(i);
}
}
}
if(t[des]!=-1) return 1;
return 0;
}
void flux()
{
int i;
while(bellman())
{
for(i=des;i;i=t[i])
{
f[t[i]][i]++;
f[i][t[i]]--;
}
}
}
int main()
{
read();
flux();
int cmin=0,i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(f[i][n+j]) cmin+=cost[i][n+j];
freopen("cc.out","w",stdout);
printf("%d",cmin);
return 0;
}