Cod sursa(job #2551325)

Utilizator vaidaoctavVaida Octav vaidaoctav Data 19 februarie 2020 19:12:16
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
#define Max 50005
#define Inf 1000000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector<pair<int,int>>v[Max];
priority_queue<pair<int,int>>q;
int dis[Max],n,m;
bool val[Max];
void citire()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
    int a,b,w;
    f>>a>>b>>w;
    v[a].push_back({b,w});
    }
}
void dijkstra()
{
    for(int i=2;i<=n;i++)
        dis[i]=Inf;
    dis[1]=0;
    q.push({0,1});
    while(!q.empty())
    {
        int a=q.top().second;
        q.pop();
        if(val[a]) continue;
            val[a]=true;
        for(auto u:v[a])
        {
            int b=u.first,w=u.second;
            if(dis[b]>dis[a]+w)
            {
                dis[b]=dis[a]+w;
                q.push({-dis[b],b});
            }
        }
    }
}
int main()
{
    citire();
    dijkstra();
    for(int i=2;i<=n;i++)
    {
        if(dis[i]==Inf)
            g<<0<<" ";
        else
            g<<dis[i]<<" ";
    }

    return 0;
}