Cod sursa(job #1111990)

Utilizator PlatonPlaton Vlad Platon Data 19 februarie 2014 12:17:15
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>
#include <vector>
#include <cstring>
#include <set>

using namespace std;

#define print(a) printf("%d ", a)
#define scan(a) scanf("%d", &a)
#define mp make_pair

#define maxn 50001
#define INF 100008

typedef pair <int, int> nod;

vector<int> ks;
vector<nod> G[maxn];
int n, m, k, cost[maxn];
set<nod> q;

void citire()
{
    freopen("ubuntzei.in", "r", stdin);
    freopen("ubuntzei.out", "w", stdout);

    int aux, aux2, c;
    scan(n); scan(m); scan(k);
    for(int i=0;i<k;i++)
    {
        scan(aux);
        ks.push_back(aux);
    }

    for(int i=0;i<m;i++)
    {
        scan(aux);scan(aux2);scan(c);
        G[aux].push_back(mp(aux2, c));
        G[aux2].push_back(mp(aux, c));
    }
}

void dijkstra(int s)
{
    int ind;
    nod cur;
    q.insert(mp(s, 0));
    cost[s]=0;
    while(!q.empty())
    {
        cur=*q.begin();
        q.erase(q.begin());
        ind=cur.first;
        for (vector<nod>::iterator it=G[ind].begin(); it!=G[ind].end(); ++it)
        {
            if (cost[ind]+(it->second)<cost[it->first])
            {
                q.erase(mp(it->first, cost[it->first]));
                cost[it->first]=cost[ind]+(it->second);
                q.insert(mp(it->first, cost[it->first]));
            }
        }
    }
}

int main()
{
    citire();

    memset(cost, 0x3f, sizeof(cost));

    dijkstra(1);

    print(cost[n]);

    return 0;
}