Cod sursa(job #3244256)

Utilizator CarenaMironov Cezar Luca Carena Data 24 septembrie 2024 12:23:08
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <queue>
#define int long long
#define INF (long long)(6e9)
#define NMAX (int)(25e4+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();
    a[f.v].d=min(a[f.v].d, f.c);
    a[f.v].v=1;
    for(auto e:a[f.v].adj)
      if(!a[e.v].v)
        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++)
    cout<<a[i].d<<" ";
  return 0;
}