Cod sursa(job #2721868)

Utilizator raul_cristeaCristea Raul raul_cristea Data 12 martie 2021 12:58:28
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include<fstream>
#include<vector>
#include<queue>
#define pinf 1000000005
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,viz[50005],d[50005];
struct nod{int val,co;};
vector<nod>v[50005];
struct comp
{
    bool operator()(nod a,nod b)
    {
        return a.co>b.co;
    }
};
priority_queue<nod,vector<nod>,comp>q;

void citire()
{
    int x,y;
    nod aux;
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>aux.co;
        aux.val=y;
        v[x].push_back(aux);
        aux.val=x;
        v[y].push_back(aux);
    }
}

void dijkstra()
{
    nod aux;
    viz[1]=1; d[1]=0;
    for(int i=2;i<=n;i++)
    {
        d[i]=pinf;
        viz[i]=0;
    }
    for(int i=0;i<v[1].size();i++)
    {
        d[v[1][i].val]=v[1][i].co;
        aux.val=v[1][i].val;
        aux.co=v[1][i].co;
        q.push(aux);
    }
    while(!q.empty())
    {
        int x=q.top().val; q.pop();
        if(viz[x]==0)
        {
            viz[x]=1;
            for(int i=0;i<v[x].size();i++)
            {
                if(viz[v[x][i].val]==0 && d[x]+v[x][i].co<d[v[x][i].val])
                {
                    d[v[x][i].val]=d[x]+v[x][i].co;
                    aux.val=v[x][i].val;
                    aux.co=d[v[x][i].val];
                    q.push(aux);
                }
            }
        }
    }
}

void afis()
{
    for(int i=2;i<=n;i++)
    {
        if(viz[i]==0)
            d[i]=0;
        fout<<d[i]<<" ";
    }
}

int main()
{
    citire();
    dijkstra();
    afis();
    fin.close();
    fout.close();
    return 0;
}