Cod sursa(job #3258249)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 21 noiembrie 2024 17:10:12
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#define NMAX 50002
using namespace std;
ifstream  fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N,M,viz[NMAX];
vector <long long>cost(NMAX,LLONG_MAX);
vector<vector<pair<int,int>>> graph(NMAX);
priority_queue<pair<long long,int>>s;

void citire()
{
    int a,b,c;
    fin>>N>>M;

    for(int i=1; i<=M; i++)
    {
        fin>>a>>b>>c;
        graph[a].push_back({b,c});
        graph[b].push_back({a,c});
    }
}

int main()
{
    citire();

    cost[1]=0;
    s.push({0,1}); ///({cost,nod});

    while(!s.empty())
    {
        pair<long long,int> x=s.top();
        s.pop();

        if(viz[x.second]==1)
        {
            continue;
        }

        viz[x.second]=1;

        for(int i=0; i<(int)graph[x.second].size(); i++)
        {
            int a,b;
            a=graph[x.second][i].first;
            b=graph[x.second][i].second;

            if(-x.first+b<cost[a])
            {
                cost[a]=-x.first+b;
                s.push({-cost[a],a});
            }
        }
    }

    for(int i=2; i<=N; i++)
    {
        if(cost[i]==LLONG_MAX)
        {
            cost[i]=0;
        }
        fout<< cost[i] << " ";
    }
    fout<< "\n";

    return 0;
}