Pagini recente » Monitorul de evaluare | Cod sursa (job #2878889) | Autentificare | Monitorul de evaluare | Cod sursa (job #2106543)
#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;
}