Cod sursa(job #3184929)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 17 decembrie 2023 13:39:18
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <queue>
#include <vector>
#define sz 50000
#define INF 0x3FFFFFFF
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

int n,m;

vector<pair<int,int>> v[sz + 5];
int d[sz + 5];

struct mch
{
    int nod;
    int cost;
    bool operator < (mch b) const
    {
        return cost > b.cost;
    }
};

priority_queue<mch> q;
int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        fin>>x>>y>>z;
        v[x].push_back({z,y});
        v[y].push_back({z,x});
    }
    for(int i=1;i<=n;i++)
        d[i]=INF;
    d[1]=0;
    q.push({1,0});
    while(!q.empty())
    {
        mch fr = q.top();
        q.pop();
        if(fr.cost != d[fr.nod])
            continue;
        for(auto& i : v[fr.nod])
        {
            int vec = i.second;
            int cost = i.first;
            if(fr.cost + cost < d[vec])
                d[vec]=fr.cost+cost,q.push({vec,d[vec]});
        }
    }
    for(int i=2;i<=n;i++)
        fout<<d[i]<<' ';
}