Cod sursa(job #2944808)

Utilizator radubuzas08Buzas Radu radubuzas08 Data 22 noiembrie 2022 23:09:55
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

const int INF=2e8+5,NMAX=50005;

vector<vector<pair<int,int>>>adjl;
priority_queue<pair<int,int>>q;
int dist[NMAX],viz[NMAX],n;

void dijkstra (int start){
    for(int j=1;j<=n;j++)
    {
        dist[j]=INF;
    }
    dist[start]=0;
    q.push(make_pair(0,start));
    while(!q.empty())
    {
        int nod;
        nod=q.top().second;
        q.pop();
        if(viz[nod]==0)
        {
            viz[nod]=1;
            for(int j=0;j<adjl[nod].size();j++)
            {
                int poz=adjl[nod][j].first;
                int dst=adjl[nod][j].second;
                if(dist[nod]+dst<dist[poz])
                {
                    dist[poz]=dist[nod]+dst;
                    q.push(make_pair(-dist[poz],poz));
                }
            }
        }

    }
}
int main()
{
    int m,a,b,c;
    fin>>n>>m;
    adjl.resize(n+1);
    for(int i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        adjl[a].push_back(make_pair(b,c));
    }
    dijkstra(1);
    for(int i=2;i<=n;i++)
    {
        if(dist[i]==INF)
        {
            fout<<0<<" ";
        }
        else
        {
            fout<<dist[i]<<" ";
        }
    }

    return 0;
}