Cod sursa(job #2858214)

Utilizator albertaizicAizic Albert albertaizic Data 27 februarie 2022 11:24:39
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;

#define MAX_N 50001
#define INF 200000000

struct Edge{
  int node,cost;
};

vector<Edge> graph[MAX_N];

queue<int> bfqueue;
int dist[MAX_N],marked[MAX_N];
int n;

void bf(int node){
  int qFront;
  for(int i=1;i<=n;i++){
    marked[i]=false;
    dist[i]=INF;
  }

  dist[node]=0;
  bfqueue.push(node);
  marked[node]=true;

  while(!bfqueue.empty()){
    qFront=bfqueue.front();

    for(const Edge& edge : graph[qFront]){
      if(dist[edge.node]>dist[qFront]+edge.cost){
        dist[edge.node]=dist[qFront]+edge.cost;
        if(!marked[edge.node]){
          bfqueue.push(edge.node);
          marked[edge.node]=true;
        }
      }
    }
    marked[qFront]=false;
    bfqueue.pop();
  }
}

int main(){
  FILE *fin,*fout;
  fin=fopen("sate.in","r");


  int m,i,a,b,c,x,y;
  fscanf(fin,"%d%d%d%d",&n,&m,&x,&y);
  for(i=0;i<m;i++){
    fscanf(fin,"%d%d%d",&a,&b,&c);
    graph[a].push_back({b,c});
    graph[b].push_back({a,-c});
  }
  fclose(fin);

  bf(x);

  fout=fopen("sate.out","w");
  fprintf(fout,"%d ",dist[y]);
  fclose(fout);
  return 0;
}