Cod sursa(job #164810)

Utilizator K0nTr0LBucatea Madalin Stefan K0nTr0L Data 24 martie 2008 20:53:50
Problema Cc Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<stdio.h>
#include<memory.h>
#define inf 0x7d00
int a[202][202],c[202][202],i,j,n,m,k,l,p,d[202],t[202];
FILE *in,*out;

int drmin(){
int i,j,p,ok;
memset(d,0x7d00,sizeof(d));
//for(i=0;i<=n+1;i++)
// d[i]=inf;
d[0]=0;
do{
 ok=0;
  for(i=0;i<=n;i++)
    if(d[i]!=inf)
      for(j=0;j<=n+1;j++)
	if(c[i][j]==1&&a[i][j]!=inf&&d[j]>d[i]+a[i][j]){
	 d[j]=d[i]+a[i][j];
	 t[j]=i;
	 ok=1;
	}
} while(ok);
return(d[n+1]);
}

int intoarce(){
int i=n+1;
while(i!=0){
 c[t[i]][i]--;
 c[i][t[i]]++;
 i=t[i];
}
return(0);
}

int main(){
in=fopen("cc.in","rt");
out=fopen("cc.out","wt");
fscanf(in,"%d",&n);
memset(a,0x7d00,sizeof(a));
memset(c,0x2,sizeof(c));
/*for(i=0;i<=(n<<1)+1;i++)
  for(j=0;j<=(n<<1)+1;j++){
   c[i][j]=2;
   a[i][j]=inf;
  }*/
for(i=1;i<=n;i++){
 a[0][i]=a[n+i][(n<<1)+1]=0;
 a[i][0]=a[(n<<1)+1][n+i]=-1;
 c[0][i]=c[n+i][(n<<1)+1]=1;
 c[i][0]=c[(n<<1)+1][n+i]=0;
  for(j=1;j<=n;j++){
   fscanf(in,"%d",&l);
   a[i][n+j]=l;
   a[n+j][i]=-l;
   c[i][n+j]=1;
   c[n+j][i]=0;
  }
}
n=n<<1;
m=0;
while((l=drmin())!=inf){
 m+=l;
 intoarce();
}
fprintf(out,"%d\n",m);
return(0);
}