Cod sursa(job #2106543)

Utilizator edynator34Nechitoaia George-Edward edynator34 Data 15 ianuarie 2018 21:38:49
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
#define NM 2005
#define MM 10005
#define INF (1<<30)
using namespace std;
ifstream in("ubuntzei.in");
ofstream out("ubuntzei.out");
vector < pair <int , int> > A[MM];
priority_queue < int > pq;
int d[NM],c[NM];
bitset <NM> viz;
int i,n,x,y,co,m,k;
void Dijkstra(int sursa , int val[NM]){
    for(i=1;i<=n;++i) val[i]=INF;
    val[sursa]=0;
    viz[sursa]=true;
    pq.push(sursa);
    vector < pair < int , int > > :: iterator it;
    while(!pq.empty()){
        int nodcurent=pq.top();
        pq.pop();
        viz[nodcurent]=false;
        for(it=A[nodcurent].begin() ; it!=A[nodcurent].end() ; ++it){
            int vecin=it->first;
            int cost=it->second;
            if(val[vecin]>val[nodcurent]+cost){
                val[vecin]=val[nodcurent]+cost;
                if(viz[vecin]==false){
                viz[vecin]=true;
                pq.push(vecin);
            }}

        }



    }


}


void afiseaza ()
{
    int i;
    for (i=1;i<=n;i++)
        if (d[i]!=INF)
            out<<d[i]<<" ";
        else out<<"0 ";
    out<<"\n";
}

int main()
{
    in>>n>>m;
    in>>k;
    for(i=1;i<=k;++i) in>>c[i];
    for(i=1;i<=m;++i){
        in>>x>>y>>co;
        A[x].push_back(make_pair(y,co));
        A[y].push_back(make_pair(x,co));
    }
    Dijkstra(1,d);
    if(k==0) out<<d[n];


    ///!!!!!!!!!!!!!!afiseaza();
    return 0;
}