Cod sursa(job #2962809)

Utilizator alex_cosmin005Ciotirnae Alexandru alex_cosmin005 Data 9 ianuarie 2023 15:44:37
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream>
#include<vector>
#include<queue>

using namespace std;

ifstream cin("dijkstra2.in");
ofstream cout("dijkstra2.out");

int n,m,p,i,j;
int INFINIT=2000000000;
int ok[100001],d[100001];
vector < pair<int,int> > v[100001];
priority_queue < pair<int,int>, vector< pair<int,int> >, greater< pair<int,int> > > ord;

void citire(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int ii,jj,d;
        cin>>ii>>jj>>d;
        v[ii].push_back(make_pair(jj,d));
        v[jj].push_back(make_pair(ii,d));
    }
}
void dijkstra(int nod){
    for(i=1;i<=n;i++)
        d[i]=INFINIT;
    d[nod]=0;
    ok[nod]=1;
    ord.push(make_pair(0,nod));
    while(!ord.empty()){
        int elem=ord.top().second;
        for(unsigned int i=0;i<v[elem].size();i++){
            int vecin=v[elem][i].first;
            int dist=v[elem][i].second;
            if(dist+d[elem]<d[vecin]){
                d[vecin]=d[elem]+dist;
                if(ok[vecin]==0){
                    ok[vecin]=1;
                    ord.push(make_pair(d[vecin],vecin));
                }
            }
        }
        ord.pop();
    }
}
void afisare(){
    for(int i=2;i<=n;i++){
        if(d[i]==INFINIT)
            cout<<"0 ";
        else
            cout<<d[i]<<" ";
    }
}
int main(){
    citire();
    dijkstra(1);
    afisare();
    return 0;
}