Cod sursa(job #2375995)

Utilizator Razvan85Secure Razvan Razvan85 Data 8 martie 2019 13:16:11
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int d[50001],a,b,c,m,n,viz[50001];
struct cmp
{
    bool operator () (int x,int y) {return d[x]>d[y];};
};
vector <pair <int,int>> v[50001];
priority_queue <int,vector <int>,cmp> q;
void dijkstra(int x)
{
    int nod,vecin,cost;
    d[x]=0;
    q.push(x);
    viz[x]=1;
    while(!q.empty())
    {
        nod=q.top();
        q.pop();
        for(int i=0;i<v[nod].size();i++)
        {
            vecin=v[nod][i].first;
            cost=v[nod][i].second;
            if(d[nod]+cost<d[vecin])
                {d[vecin]=d[nod]+cost;
                if(viz[vecin]==0)
                    viz[vecin]=1,q.push(vecin);
                }
        }
    }
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        f>>a>>b>>c;
        v[a].push_back({b,c});
    }
    for(int i=1;i<=n;i++)
        d[i]=1000000001;
    dijkstra(1);
    for(int i=2;i<=n;i++)
        if(d[i]==1000000001) g<<0;
        else
        g<<d[i]<<" ";
    return 0;
}