Cod sursa(job #1365050)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 27 februarie 2015 23:58:03
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <cstdio>
#include <fstream>
#include <vector>
#define DIM 101000
using namespace std;

//FILE *fin = fopen("sate.in" , "r");
//FILE *fout= fopen("sate.out", "w");
ifstream fin ("sate.in" );
ofstream fout("sate.out");

int N, M, i, j, x, y, z, D[DIM];
int C[DIM], istart, ifinish;
int F[DIM], p, u, val, d;
vector < int > V[DIM];
char S[DIM];

void SetUp(){
     //fscanf(fin, "%d%d%d%d", &N, &M, &istart, &ifinish);
     fin >> N >> M >> istart >> ifinish;
     for(i = 1; i <= M; i ++){
          //fscanf(fin, "%d%d%d", &x, &y, &z);
          fin.get();
          fin.get(S + 1, DIM);
          x = y = z = 0;
          j = 1;
          while(S[j] >= '0' && S[j] <= '9'){
               x = x * 10 + (S[j] - '0');
               j ++;
          }
          j ++;
          while(S[j] >= '0' && S[j] <= '9'){
               y = y * 10 + (S[j] - '0');
               j ++;
          }
          j ++;
          while(S[j] >= '0' && S[j] <= '9'){
               z = z * 10 + (S[j] - '0');
               j ++;
          }
          V[x].push_back(y);
          V[x].push_back(z);
          V[y].push_back(x);
          V[y].push_back(-z);
     }
     p = 1; u = 1;
     C[p] = istart;
     return;
}

void BFS(){
     while(p <= u){
          val = C[p]; F[val] = 1;
          for(d = 0; d < V[val].size(); d += 2){
               if(F[V[val][d]] == 0){
                    D[V[val][d]] = D[val] + V[val][d+1];
                    u ++; C[u] = V[val][d];
               }
               if(D[ifinish] != 0)
                    break;
          }
          if(D[ifinish] != 0)
               break;
          p ++;
     }
     //fprintf(fout, "%d", D[ifinish]);
     fout << D[ifinish];
     return;
}

int main(){
     SetUp();
     BFS();
     return 0;
}