Cod sursa(job #627120)

Utilizator Mirc100Mircea Octavian Mirc100 Data 29 octombrie 2011 01:47:23
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <queue>
#include<stdio.h>
using namespace std;
struct muchie{
       int v;
       int cost;
}       ;

int d[30000];
int n,m,s,viz[30000];
vector<muchie> l[30000]; 
int main(){
     FILE *f;
     int i,x,y,a,b;
     muchie mc;
     long cost;
     queue<int> c;
     f=fopen("sate.in","r");
     fscanf(f,"%d %d %d %d",&n,&m,&a,&b);
     for(i=0;i<m;i++){
         fscanf(f,"%d %d %d",&x,&y,&cost);
         mc.v=y-1;
         if(x<y)
            mc.cost=cost;
         else
            mc.cost=-cost;
         l[x-1].push_back(mc);
         mc.v=x-1;
         if(x<y)
            mc.cost=-cost;
         else
            mc.cost=cost;
        l[y-1].push_back(mc);
     }
     fclose(f);
     for(i=0;i<n;i++)
        d[i]=0;
     a--;
     b--;
     c.push(a);
     d[a]=0;
     viz[a]=1;
     int ok=1;
     
     while(c.size()>0 && ok){
         x=c.front();
        
         c.pop();
         for(i=0;i<l[x].size();i++)
                 if(viz[l[x][i].v]==0){
                     c.push( l[x][i].v);
                     viz[l[x][i].v]=1;
                     d[l[x][i].v]=d[x]+l[x][i].cost;
                     if(l[x][i].v==b) ok=0;
              
              }
     }  
      printf("ok");                                
     f=fopen("sate.out","w");
     fprintf(f,"%d ",d[b]);
     fclose(f);   
     return 0;   
}