Cod sursa(job #2795479)

Utilizator ana_madalina_18Radu Ana Madalina ana_madalina_18 Data 6 noiembrie 2021 14:05:09
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
int n,m;
struct elem
{
    int val;
    int destinatie;
    bool operator <(const elem & other)const
    {
        return val>other.val;
    }
};
vector <elem> v[50005];
priority_queue <elem> heap;
int dist[50005];
const int MAX=0x3f3f3f3f;
void dijkstra()
{
    elem nou;
    nou.val=0;
    nou.destinatie=1;
    heap.push(nou);
    dist[1]=0;
    while(!heap.empty())
    {
        elem primul=heap.top();
        heap.pop();
        for(int i=0;i<v[primul.destinatie].size();i++)
        {
            int cost_curent=v[primul.destinatie][i].val;
            int vecin=v[primul.destinatie][i].destinatie;
            if((dist[primul.destinatie]+cost_curent)<dist[vecin])
            {
                dist[vecin]=dist[primul.destinatie]+cost_curent;
                elem next;
                next.destinatie=vecin;
                next.val=dist[vecin];
                heap.push(next);
            }
        }
    }
}
int main()
{
    ifstream fin("dijkstra.in");
    ofstream fout("dijkstra.out");
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        fin>>x>>y>>z;
        elem nou;
        nou.val=z;
        nou.destinatie=y;
        v[x].push_back(nou);
    }
    memset(dist,MAX,sizeof dist);
    dijkstra();
    for(int i=2;i<=n;i++)
    {
        if(dist[i]==MAX)
            fout<<0<<' ';
        else
        fout<<dist[i]<<' ';
    }
    return 0;
}