Cod sursa(job #628853)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 2 noiembrie 2011 11:18:26
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <stdio.h>
#include <vector>

#define MMAX 100024
#define NMAX 30005
using namespace std;

struct str{
   int nod, l;
}coada [NMAX];

struct s{
   int nod;
   int l;
};

vector <s> muchie[NMAX];
bool viz[NMAX];
int lung[NMAX];

int main(){
   int n,m,x,y;
   FILE *fin=fopen("sate.in","r");
   fscanf(fin,"%d%d%d%d",&n,&m,&x,&y);
   
   int i;
   int a,b,c;
   s aux;
   for(i=1;i<=m;i++){
       fscanf(fin,"%d%d%d",&a,&b,&c);
       aux.nod=b;
       aux.l=c;
       muchie[a].push_back(aux);
       aux.nod=a;
       muchie[b].push_back(aux);
       lung[a]++;
       lung[b]++;
   }
//afisez ce am cicit...
 /*    int j;
     for(i=1;i<=n;i++){
       printf("vecinii si lungimile nodului %d\n",i); 
       for(j=0;j<lung[i];j++){
           printf("(%d,%d),",muchie[i][j].nod,muchie[i][j].l);
       }
       printf("\n");
     }*/
//termin afisAREA/


   int li=0,ls=1;
   coada[0].nod=x;
   coada[0].l=0;
   viz[x]=true;
   

   FILE *fout=fopen("sate.out","w");
   while(li<ls){

     //incerc sa expandez nodul coada[li]
      for(i=0;i<lung[coada[li].nod];i++){
          if(viz[muchie[coada[li].nod][i].nod]==false){
              viz[muchie[coada[li].nod][i].nod]=true;
              coada[ls].nod=muchie[coada[li].nod][i].nod;
              if(coada[li].nod<muchie[coada[li].nod][i].nod)
                   coada[ls].l=coada[li].l+muchie[coada[li].nod][i].l;
               else  coada[ls].l=coada[li].l-muchie[coada[li].nod][i].l;
              //printf("adaug (%d,%d)\n",coada[ls].nod,coada[ls].l);
              //daca nodul pe care il adaug e y..gata
              if(coada[ls].nod==y){
                  fprintf(fout,"%d\n",coada[ls].l);
                 // printf("%d\n",coada[ls].l);
                  fclose(fout);
                  return 0;
              }
               ls++;

          }
          
      }
   li++;
   }
return 0;
}