Cod sursa(job #2422572)

Utilizator urweakurweak urweak Data 19 mai 2019 11:48:38
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
#define LMAX 100005
#define pb push_back
using namespace std;
typedef pair<int, int> PII;
vector <PII> E[LMAX];
int D[LMAX];
 
void Dijkstra(int k)
{
    priority_queue<PII, vector<PII>, greater<PII>> Q;
    Q.push({0, k});
    D[k] = 0;
    while(!Q.empty())
    {
        int len = Q.top().first, nod = Q.top().second;
        Q.pop();
        if(len!=D[nod])
            continue;
        for(auto it : E[nod])
            if(len + it.second < D[it.first])
            {
                D[it.first] = len + it.second;
                Q.push({D[it.first], it.first});
            }
    }
}
 
int main()
{
    ifstream fin("dijkstra.in");
    ofstream fout("dijkstra.out");
    int N, M;
    fin >> N >> M;
    for(int i = 1; i<=M; i++)
    {
        int st, dr, len;
        fin >> st >> dr >> len;
        E[st].pb({dr,len});
    }
    for(int i = 2; i<=N; i++)
        D[i] = INT_MAX;
    Dijkstra(1);
    for(int i = 2; i<=N; i++)
        if(D[i] == INT_MAX)
            fout << 0 <<' ';
        else
            fout << D[i] <<' ';
return 0;
}