Cod sursa(job #359635)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 27 octombrie 2009 21:39:39
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include<stdio.h>
FILE *f,*g;

int nr[30002],c[2][30002],u,p,d,x,y,i,j,z,n,m,viz[30002],l;
	
int main(){
	struct orase
  {
    int o,d;
    } *a[30002];
 f=fopen("sate.in","r");
	

fscanf(f,"%d %d %d %d",&n,&m,&x,&y);
for(i=1;i<=m;i++){
    fscanf(f,"%d %d %d",&x,&y,&d);
	nr[x]++;
     nr[y]++;
     }
fclose(f);
FILE * s=fopen("sate.in","r");
fscanf(s,"%d %d %d %d",&n,&m,&x,&y);
  for(i=0;i<=n;i++)
   {  a[i]=new orase[nr[i]+1];
    a[i][0].d=0;
    }
for(i=1;i<=m;i++){
	fscanf(s,"%d %d %d",&z,&j,&d);
    l=++a[z][0].d;
    a[z][l].o=j;
    a[z][l].d=d;
    l=++a[j][0].d;
    a[j][l].o=z;
    a[j][l].d=d;
    }
fclose(s);

u=1;p=1;  c[0][p]=x; viz[x]=1;

	for(i=1;i<=a[x][0].d;i++)
		{u++;
		 c[0][u]=a[x][i].o;
		 viz[c[0][u]]=1;
		 c[1][u]=a[x][i].d;
		 if (c[0][u]==y){
			 j=u;
			 u=0;
		   break;
		 }
	    }

p++;
while(p<=u){  
	   for(i=1;i<=a[c[0][p]][0].d;i++)
	   { l= a[c[0][p]][i].o;
		   if(viz[l]==0){
			   
			   viz[l]=1;			   
			   if(l<x&&c[0][p]<l)
			   { u++; c[0][u]=l;
			          c[1][u]=c[1][p]-a[c[0][p]][i].d;
			   }
			   else if(c[0][p]<x&&l>x)
			   { u++; c[0][u]=l;
					   c[1][u]=a[c[0][p]][i].d-c[1][p];
			   }
			   else if(x<c[0][p]&&c[0][p]<l)
			   { u++; c[0][u]=l;
					c[1][u]=c[1][p]+a[c[0][p]][i].d;}
			   else if(l<c[0][p]&&c[0][p]<x)
			   { u++; c[0][u]=l;
					  c[1][u]=c[1][p]+a[c[0][p]][i].d;}
			   else if(l>x&&c[0][p]>l)
			   { u++; c[0][u]=l;
			                c[1][u]=c[1][p]-a[c[0][p]][i].d;
			   }
		   
			   if(c[0][u]==y){
			    p=u;
		        break;
		   }	
		   }
	   }
	
    	p++;
}
if(u==0)u=j;
g=fopen("sate.out","w");
fprintf(g,"%d",c[1][u]);
fclose(g);
return 0;
}