Cod sursa(job #2720904)

Utilizator radu16012003Radu Dumitrache radu16012003 Data 11 martie 2021 13:23:24
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;
const int inf = 20000*50005;
const int nmax=50005;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");

bitset <nmax> f;
int n, k, l, h;
int d[nmax];
struct nod
{
    int u,c;
};
vector <nod> v[250005];
struct cmp{
bool operator()(int x,int y)
{
    return d[x]>d[y];
}
};
priority_queue <int,vector<int>,cmp> q;

void dk(int sursa)
{
    q.push(sursa);
    d[sursa]=0;
    while(!q.empty())
    {
        int node=q.top();
        q.pop();
        f[node]=0;
        for(int i=0;i!=v[node].size();++i)
            if(d[v[node][i].u]>d[node]+v[node][i].c)
        {   if(f[v[node][i].u]==0){
            q.push(v[node][i].u);
            f[v[node][i].u]=1;}
            d[v[node][i].u]=d[node]+v[node][i].c;
        }
    }
}
int main() {
    int m ;
   cin>>n>>m;
   for(int i=1;i<=m;++i)
   {
       int x,y,z;
       cin>>x>>y>>z;
       v[x].push_back({y,z});
   }
   for(int i=1;i<=n;++i)
d[i]=inf;
   dk(1);
   for(int i=2;i<=n;++i)
    if(d[i]!=inf)
    cout<<d[i]<<" ";
   else
    cout<<"0 ";
   return 0;
}