Cod sursa(job #3286317)

Utilizator Mate_3.14_9.8_infoRaducanu Mario-Ionut Mate_3.14_9.8_info Data 13 martie 2025 23:35:32
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include<fstream>
#include<queue>
#include<vector>
#define INF 200000047
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int n,m,d[50002],p,q,r;
bool f[50002];
struct muchie{
    int y;
    int cost;
}a;
vector<muchie>v[50002];
struct comp{
    bool operator()(const muchie& a1, const muchie &b)const{
        return a1.cost>b.cost;
    }
};
priority_queue<muchie,vector<muchie>,comp>pq;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>p>>q>>r;
        a.y=q;
        a.cost=r;
        v[p].push_back(a);
    }
    for(int i=1;i<=n;i++)
        d[i]=INF;
    f[1]=1;
    d[1]=0;
    for(int i=0;i<v[1].size();i++){
        pq.push(v[1][i]);
        d[v[1][i].y]=v[1][i].cost;
    }
    while(!pq.empty()){
        a.y=pq.top().y;
        a.cost=pq.top().cost;
        pq.pop();
        if(a.cost>d[a.y]) continue;
        for(int i=0;i<v[a.y].size();i++){
            if(!f[v[a.y][i].y]){
                if(d[v[a.y][i].y]>d[a.y]+v[a.y][i].cost){
                    d[v[a.y][i].y]=d[a.y]+v[a.y][i].cost;
                    pq.push({v[a.y][i].y,d[v[a.y][i].y]});
                }
            }
        }
        f[a.y]=1;
    }
    for(int i=2;i<=n;i++){
        if(d[i]==INF)
            cout<<0<<" ";
        else
            cout<<d[i]<<" ";
    }
    return 0;
}