Cod sursa(job #2059238)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 6 noiembrie 2017 20:02:30
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
#include <vector>
#include <queue>
#define inf 1e9
using namespace std;
const int nmax=5e4+3;
struct usu
{
    int nod,cost;
};
int n,m,a,b,c,nod,dist[nmax];
vector <usu> v[nmax];
priority_queue < pair<int,int> > q;
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;++i)
    {
        scanf("%d%d%d",&a,&b,&c);
        usu t;
        t.nod=b;
        t.cost=c;
        v[a].push_back(t);
        t.nod=a;
    }
    q.push({0,1});
    for(int i=2;i<=n;++i) dist[i]=inf;
    while(!q.empty())
    {
        nod=q.top().second;
        q.pop();
        for(int i=0;i<v[nod].size();++i)
        {
            if(dist[v[nod][i].nod]>dist[nod]+v[nod][i].cost)
            {
                dist[v[nod][i].nod]=dist[nod]+v[nod][i].cost;
                q.push({-dist[v[nod][i].nod],v[nod][i].nod});
            }
        }
    }
    for(int i=2;i<=n;++i)
    {
        if(dist[i]==inf) printf("0 ");
        else printf("%d ",dist[i]);
    }
    return 0;
}