Cod sursa(job #2670660)

Utilizator tudosa.bogdanTudosa Eduard-Bogdan tudosa.bogdan Data 10 noiembrie 2020 14:16:20
Problema Algoritmul lui Dijkstra Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
#define IOS ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define NMAX 250005

using namespace std;

FILE *fin = fopen("dijkstra.in" , "r");
FILE *fout = fopen("dijkstra.out" , "w");

int n , m , d[50005];

vector <pair <int , int> > muchii[NMAX];
vector <pair <int , int> > :: iterator it;

inline bool cmp(int a , int b)
{
    return (d[a] < d[b]);
}

set <int , bool (*)(int , int)> s(cmp);

void dijkstra()
{
    d[1] = 0;
    s.insert(1);
    while(!s.empty())
    {
        int p = *s.begin();
        s.erase(p);
        for(it = muchii[p].begin() ; it != muchii[p].end() ; it ++)
            if(d[p] + (*it).second < d[(*it).first])
            {
                s.erase((*it).first);
                d[(*it).first] = d[p] + (*it).second;
                s.insert((*it).first);
            }
    }
}

int main()
{
    IOS
    fscanf(fin , "%d%d" , &n , &m);
    for(int i = 1 ; i <= m ; i ++)
    {
        int x , y , cost;
        fscanf(fin , "%d%d%d" , &x , &y, &cost);
        muchii[x].push_back({y , cost});
    }
    for(int i = 1 ; i <= n ; i ++) d[i] = 1e9 + 10;
    dijkstra();
    for(int i = 1 ; i <= n ; i ++)
        if(d[i] == 1e9 + 10)
            d[i] = 0;
    for(int i = 2 ; i <= n ; i ++)
        fprintf(fout , "%d " , d[i]);
    return 0;
}