Cod sursa(job #2422425)

Utilizator Natasa_CirsteaCirstea Natasa Alexandra Natasa_Cirstea Data 18 mai 2019 18:11:57
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <limits>

using namespace std;
ifstream f ("dijkstra.in");
ofstream g ("dijkstra.out");

struct Edge
{
    int nod,cost;
    Edge(int n,int c)
    {
        nod=n;
        cost=c;
    }
};

int main()
{
    int n,m,i,a,b,c;
    f>>n>>m;
    vector<vector<Edge>>muchii(m);
    vector<int>distance(n+1,n+1);
    set<pair<int,int>>Q;

    for(i=0; i<m; i++)
    {
        f>>a>>b>>c;
        muchii[a].push_back(Edge(b,c));
    }

    distance[1]=0;
    for(i=1; i<=n; i++)
        Q.insert(make_pair(distance[i],i));

    while(!Q.empty())
    {
        int u=(*Q.begin()).second;
        Q.erase(Q.begin());
        for(auto v:muchii[u])
            if(distance[v.nod]>distance[u]+v.cost)
            {
                Q.erase(make_pair(distance[v.nod],v.nod));
                distance[v.nod]=distance[u]+v.cost;
                Q.insert(make_pair(distance[v.nod],v.nod));
            }
    }

    for(i=2; i<=n; i++)
        g<<distance[i]<<" ";

    return 0;
}