Cod sursa(job #2798379)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 11 noiembrie 2021 11:29:45
Problema Sate Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

ifstream in("sate.in");
ofstream out("sate.out");

const int MAXN = 100000;
int n, x, y;

struct nod{
  vector<int> next;
  vector<int> d;
  int distanta;
};

nod noduri[MAXN + 1];

void read_graph(){
  int m, i, k, j, dis;
  in>>n>>m>>x>>y;

  for( i = 0; i < m; i++ ){
    in>>k>>j>>dis;

    noduri[j].next.push_back(k);
    noduri[k].next.push_back(j);

    noduri[j].d.push_back(dis);
    noduri[k].d.push_back(dis);

  }

  /*for( i = 0; i < n; i++ ){
    out<<"numar nod: "<<i + 1<<" ";
    for( int j = 0; j < noduri[i].next.size(); j++ )
      out<<noduri[i].next[j] + 1<<" ";
    out<<'\n';
  }*/
}

queue <int> q;
//vector<int> dis;

void bfs(int root){
  int i, j;

  for( i = 1; i <= n; i++ )
    noduri[i].distanta = -1;

  q.push(root);
  noduri[root].distanta = 0;
  while( !q.empty() ){

    i = q.front();

    for( j = 0; j < noduri[i].next.size(); j++ ){
      if( noduri[noduri[i].next[j]].distanta == -1 ){
        if( i > noduri[i].next[j] )
          noduri[noduri[i].next[j]].distanta  = noduri[i].distanta - noduri[i].d[j];
        else
          noduri[noduri[i].next[j]].distanta  = noduri[i].distanta + noduri[i].d[j];
        q.push(noduri[i].next[j]);
      }
    }
    q.pop();
  }
}

int main(){
  int i;
  read_graph();

  bfs(x);
  out<<noduri[y].distanta<<" ";
  return 0;
}