Cod sursa(job #2416857)

Utilizator smoc_georgemarianSmoc George-Marian smoc_georgemarian Data 28 aprilie 2019 13:06:47
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
#define NMAX 50009
#define INF 999999999
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
long long int D[NMAX];
struct nume{long long int x;long long int c;};
struct nume1{long long int x;};
vector <nume> g[NMAX];
bool uz[NMAX];
bool operator <(nume1 a, nume1 b)
{
 D[a.x]>D[b.x];
}
priority_queue <nume1 , vector<nume1> >H;
int n,m;
void citire();
void djk(int start);
int main()
{citire();
 djk(1);
    return 0;
}
void citire()
{int x,y,c;
 int i;
 fin>>n>>m;
 for(i=1;i<=m;i++)
    {
      fin>>x>>y>>c;
      g[x].push_back({y,c});
      g[y].push_back({x,c});
    }
}
void djk(int start)
{
  int i;
  nume1 act,vec;
  for(i=0;i<NMAX;i++)
        D[i]=INF;
  D[start]=0;uz[start]=1;H.push({start});
  while(!H.empty())
    {
       act=H.top();H.pop();uz[act.x]=0;
       for(i=0;i<g[act.x].size();i++)
            {
            if(D[act.x]+g[act.x][i].c<D[g[act.x][i].x])
                {
                 D[g[act.x][i].x]=D[act.x]+g[act.x][i].c;
                 if(!uz[g[act.x][i].x])
                    {
                     uz[g[act.x][i].x]=1;
                     H.push({g[act.x][i].x});

                    }
                }
            }
    }
   for(int i=2;i<=n;i++)
        fout<<D[i]<<" ";
}