Cod sursa(job #1647949)

Utilizator TibiraducanuTiberiu Raducanu Tibiraducanu Data 10 martie 2016 23:00:49
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;

const int Inf=250000005,NMAX=50005;
typedef pair <int,int> ii;
priority_queue < ii , vector<ii> , greater<ii> > pq;
vector <ii> G[NMAX];
int dist[NMAX];

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);

    int n,m,a,b,c,i,u,d,v;

    scanf("%d%d",&n,&m);

    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        G[a].push_back(ii(b,c));
    }

    for(i=2;i<=n;i++) dist[i]=Inf;

    pq.push(ii(0,1));

    while(!pq.empty())
    {
        d=pq.top().first;
        u=pq.top().second;
        pq.pop();

        for(i=0;i<G[u].size();i++)
        {
            v=G[u][i].first;
            d=G[u][i].second;

            if(dist[v]>dist[u]+d)
            {
                dist[v]=dist[u]+d;
                pq.push(ii(dist[v],v));
            }
        }
    }

    for(i=1;i<=n;i++) if(dist[i]==Inf) dist[i]=0;
    for(i=2;i<=n;i++) printf("%d ",dist[i]);

    return 0;
}