Cod sursa(job #2766363)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 31 iulie 2021 21:07:43
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;

ifstream fin ("dijkstra.in");
ofstream fout("dijkstra.out");

const int dim=50009,inf=1e18;

struct elem{
    int x,c;
    bool operator < (const elem &a) const
    {
        return c>a.c;
    }
};

vector<elem>v[dim];
priority_queue<elem>pq;

int n,m;
int minn[dim];

void dijkstra(){
    pq.push({1,0});
    while(!pq.empty()){
        int x=pq.top().x,c=pq.top().c;
        if(c==minn[x]){
            for(int i=0;i<v[x].size();i++){
                int y=v[x][i].x,cost=v[x][i].c;
                if(minn[x]+cost<minn[y]){
                    minn[y]=minn[x]+cost;
                    pq.push({y,minn[y]});
                }
            }
        }
        pq.pop();
    }
}

signed main(){
        fin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,c;
        fin>>x>>y>>c;
        v[x].push_back({y,c});
    }

    for(int i=2;i<=n;i++)
        minn[i]=inf;
    dijkstra();

    for(int i=2;i<=n;i++){
        if(minn[i]==inf)
            minn[i]=0;
        fout<<minn[i]<<' ';
    }
}