Cod sursa(job #2554123)

Utilizator AlbertUngureanuAlbert AlbertUngureanu Data 22 februarie 2020 16:43:21
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
#define INF 1000000

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;
    Cost[x]=0;
    Q.push(x);
    while(!Q.empty())
    {
        P=Q.front();
        Q.pop();
        if(!Viz[P])
        {
            Viz[P]=1;
            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;
                    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;
}