Cod sursa(job #3253475)

Utilizator CarenaMironov Cezar Luca Carena Data 2 noiembrie 2024 19:55:32
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <queue>
#define int long long
#define INF (long long)(6e9)
#define NMAX (int)(5e4+5)

using namespace std;

ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");

struct edge
{
  int v, c;
  friend bool operator<(const edge a, const edge b)
  {
    return a.c>b.c;
  }
};
struct node{int v=0, d=INF; vector<edge> adj;};
node a[NMAX];
priority_queue<edge> q;

void dijkstra()
{
  while(!q.empty())
  {
    edge f=q.top();
    q.pop();
    for(auto e:a[f.v].adj)
      if(!a[e.v].v && a[e.v].d>f.c+e.c)
      {
        a[e.v].v=1;
        a[e.v].d=f.c+e.c;
        q.push({e.v, f.c+e.c});
      }
  }
}

signed main()
{
  int n, m;
  cin>>n>>m;
  for(int i=1;i<=m;i++)
  {
    int u, v, c;
    cin>>u>>v>>c;
    a[u].adj.push_back({v, c});
    a[v].adj.push_back({u, c});
  }
  q.push({1, 0}); a[1].d=0; a[1].v=1;
  dijkstra();
  for(int i=2;i<=n;i++)
    if(a[i].d==INF)
      cout<<"0 ";
    else
      cout<<a[i].d<<" ";
  return 0;
}