Cod sursa(job #2751167)

Utilizator Dragono63Stanciu Rares Stefan Dragono63 Data 14 mai 2021 15:07:41
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50005

using namespace std;

// INPUT / OUTPUT

string FILE_IN = "dijkstra.in";
string FILE_OUT = "dijkstra.out";

ifstream f(FILE_IN);
ofstream g(FILE_OUT);

// GLOBAL DECLARATIONS

int N, M, ans[NMAX];

bool visited[NMAX];

struct Node
{
    int node, dist;
    bool operator < (const Node &other)const
    {
        return dist > other.dist;
    }
};
vector<Node> muchii[2 * NMAX];
priority_queue<Node> pq;
// FUNCTIONS

void ReadInput();
void Solution();
void Output();
//-------------------------------------
inline void ReadInput()
{
    f >> N >> M;
    
    for (int i = 0 ; i < M ; ++ i)
    {
        int A, B, C;
        
        f >> A >> B >> C;
        muchii[A].push_back({B, C});
    }
}
//-------------------------------------
inline void Solution()
{
    pq.push({1, 0});
    
    while (!pq.empty())
    {
        int node = pq.top().node;
        int dist = pq.top().dist;
        
        pq.pop();
        
        if (!visited[node])
        {
            visited[node] = true;
            ans[node] = dist;
            
            for (auto adj: muchii[node])
            {
                if (!visited[adj.node])
                {
                    pq.push({adj.node, dist + adj.dist});
                }
            }
        }
        
    }
}
//-------------------------------------
inline void Output()
{
    for (int i = 2 ; i <= N ; ++ i)
        g << ans[i] << " ";
}
//-------------------------------------
int main(int argc, const char * argv[]) {
    
    ReadInput();
    Solution();
    Output();
    return 0;
}