Cod sursa(job #1517236)

Utilizator popescu.octavianPopescu Octavian popescu.octavian Data 3 noiembrie 2015 23:28:25
Problema Algoritmul lui Dijkstra Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <cstdio>
#include <vector>
#include <queue>
#define nod pair<int,int>
#define pb push_back
#define NMax 50005
#define INF 10000

using namespace std;

struct compar {
    bool operator() (const nod &a, const nod&b)
    {
        return a.second>b.second;
    }
};
priority_queue<nod, vector<nod>, compar> Q;
vector<nod> G[NMax];
int D[NMax];
bool viz[NMax];
int i, j, N, M, v, u, w, l;
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);

    scanf("%d %d ",&N,&M);

    for(i=1;i<=M;i++)
    {
        scanf("%d %d %d",&u,&v,&w);
        G[u].pb(nod(v,w));
    }
    for(i=2;i<=N;i++)
        D[i]=INF;
    D[1]=0;
    Q.push(nod(1,0));

    while(!Q.empty())
    {
        u=Q.top().first;
        Q.pop();
        if(!viz[u])
        {
            l=G[u].size();
            for(i=0; i<l; i++)
            {
                v=G[u][i].first;
                w=G[u][i].second;
                if(!viz[v]&&D[u]+w<D[v])
                {
                    D[v]=D[u]+w;
                    Q.push(nod(v,D[v]));
                }
            }
            viz[u]=1;
        }
    }
    for(i=2; i<=N; i++)
        if(D[i]==INF) printf("0 ");
        else printf("%d ",D[i]);
    return 0;
}