Cod sursa(job #1165516)

Utilizator andreiiiiPopa Andrei andreiiii Data 2 aprilie 2014 18:56:55
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define PII pair<int, int>
#define x first
#define y second
#define mp make_pair

using namespace std;

const int N=50005, INF=0x3f3f3f3f;

struct comp{
    bool operator()(const PII &a, const PII &b) const
    {
        return a<b;
    }
};

vector <PII> G[N];
int dist[N];
priority_queue <PII, vector<PII>, comp> H;

void dijkstra()
{
    int nod, d;
    memset(dist, INF, sizeof(dist));
    dist[1]=0;
    H.push(mp(0, 1));
    while(!H.empty())
    {
        nod=H.top().second;
        d=H.top().first;
        H.pop();
        if(d>dist[nod]) continue;
        for(auto p: G[nod])
        {
            if(dist[nod]+p.y<dist[p.x])
            {
                dist[p.x]=dist[nod]+p.y;
                H.push(mp(dist[p.x], p.x));
            }
        }
    }
}

int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    int n, m, i, x, y;
    scanf("%d%d", &n, &m);
    while(m--)
    {
        scanf("%d%d%d", &x, &y, &i);
        G[x].push_back(mp(y, i));
        G[y].push_back(mp(x, i));
    }
    dijkstra();
    for(i=2;i<=n;i++) printf("%d ", dist[i]);
}