Cod sursa(job #2798387)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 11 noiembrie 2021 11:35:58
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 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];

FILE *fin, *fout;

void read_graph(){
  int m, i, k, j, dis;

  fin = fopen( "sate.in", "r" );

  fscanf(fin, "%d%d%d%d", &n, &m, &x, &y);
  //in>>n>>m>>x>>y;

  for( i = 0; i < m; i++ ){

    fscanf(fin, "%d%d%d", &k, &j, &dis);
    //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);

  }

  fclose(fin);
}

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(){
  read_graph();

  bfs(x);

  fout = fopen( "sate.out", "w" );
  fprintf(fout, "%d", noduri[y].distanta);
  //out<<noduri[y].distanta<<" ";

  fclose(fout);
  return 0;
}