Cod sursa(job #2161401)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 11 martie 2018 18:20:55
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#define NMAX 2005
#define INF 0x3f3f3f3f

using namespace std;

int N, M, K, orase[NMAX], dist[NMAX];
vector <pair <int, int> > G[NMAX];
priority_queue <pair <int, int> > Q;

void setupDist(int nodsursa) {
    for(int i = 1; i <= N; ++i) {
        dist[i] = INF;
    }
    dist[nodsursa] = 0;
}

void read() {
    scanf("%d %d", &N, &M);
    scanf("%d", &K);
    for(int i = 1; i <= K; ++i) {
        scanf("%d", &orase[i]);
    }
    for(int i = 1; i <= M; ++i) {
        int x, y, c;
        scanf("%d %d %d", &x, &y, &c);
        G[x].push_back({y, c});
        G[y].push_back({x, c});
    }
    setupDist(1);
}

void dijkstra(int start) {
    Q.push({0, start});
    vector <pair <int, int> >::iterator it;
    int nod, cost;
    while(!Q.empty()) {
        cost = -1 * Q.top().first;
        nod = Q.top().second;
        Q.pop();
        if(dist[nod] != cost) {
            continue;
        }
        for(it = G[nod].begin(); it != G[nod].end(); ++it) {
            if(dist[it->first] > dist[nod] + it->second) {
                dist[it->first] = dist[nod] + it->second;
                Q.push({-1 * dist[it->first], it->first});
            }
        }
    }
}

int main()
{
    freopen("ubuntzei.in", "r", stdin);
    freopen("ubuntzei.out", "w", stdout);
    read();
    dijkstra(1);
    printf("%d", dist[N]);
    return 0;
}