Cod sursa(job #2552643)

Utilizator AlbertUngureanuAlbert AlbertUngureanu Data 21 februarie 2020 08:04:11
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
#define INF 1000000000

using namespace std;

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

int N,M;
int Cost[50001];
unsigned Grad[50001];
bool Viz[50001];
vector< pair<int,int> >Ad[50001];

void citire()
{
    int x,y,z;
    fin>>N>>M;
    for(int i=1;i<=N;i++)
        Cost[i]=INF;
    for(int i=1;i<=M;i++)
    {
        fin>>x>>y>>z;
        Ad[x].push_back({y,z});
        Grad[x]++;
    }
}

void dijkstra(int x)
{
    queue<int>Q;
    int P;
    Viz[x]=1;
    Cost[x]=0;
    Q.push(x);
    while(!Q.empty())
    {
        P=Q.front();
        Viz[P]=0;
        Q.pop();
        for(unsigned i=0;i<Grad[P];i++)
            if(Cost[Ad[P][i].first]>Cost[P]+Ad[P][i].second)
            {
                Cost[Ad[P][i].first]=Cost[P]+Ad[P][i].second;
                if (!Viz[Ad[P][i].first])
                {
                    Viz[Ad[P][i].first]=1;
                    Q.push(Ad[P][i].first);
                }
            }
    }
}

void afisare()
{
    for(int i=2;i<=N;i++)
        if(Cost[i]==INF)
            fout<<0<<" ";
        else
            fout<<Cost[i]<<" ";
}

int main()
{
    citire();
    dijkstra(1);
    afisare();
    return 0;
}