Cod sursa(job #1034841)

Utilizator fustosroberttFustos Robert fustosrobertt Data 18 noiembrie 2013 08:00:54
Problema Sate Scor 100
Compilator cpp Status done
Runda cei_mici3 Marime 1.24 kb
#include<fstream>
#include<vector>
#include<queue>

using namespace std;

struct coada
{
    int nod, dist;
};

vector<coada> L[30002];
queue<int> q;
int d[30001], X, Y;
unsigned int n;

void Citire()
{
  coada w;
  int x, y, cost;
  unsigned int i, m;
  ifstream f("sate.in");
  f >> n >> m >> X >> Y;

  for (i = 1; i <= m; i++)
  {
    f >> x >> y >> cost;
    w.dist = cost;
    w.nod = y;
    L[x].push_back(w);
    w.nod = x;
    L[y].push_back(w);
  }
}

void BFS(int nod_start)
{
      int k, j;
      unsigned int i;
      coada w;
      for(i = 1; i <= n; i++)
          d[i] = -1;
      q.push(nod_start);
      d[nod_start] = 0;

      while (!q.empty())
      {
        k = q.front();
        q.pop();
        for(i = 0; i < L[k].size(); i++)
        {
          w = L[k][i];
          j = w.nod;
          if (d[j] == -1)
          {
              if (k < j) d[j] = d[k] + w.dist;
                else d[j] = d[k] - w.dist;
              q.push(j);
              if (d[Y] >= 0) return;
          }
        }
      }
}

void Afisare()
{
    ofstream fout("sate.out");
    fout << d[Y] << "\n";
    fout.close();
}

int main()
{
  Citire();
  BFS(X);
  Afisare();
  return 0;
}