Pagini recente » Cod sursa (job #671878) | Cod sursa (job #147876) | Cod sursa (job #592548) | Cod sursa (job #186654) | Cod sursa (job #1111856)
#include <stdio.h>
#include <vector>
#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 10001
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<n;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();
for(int i=2;i<=n;i++)
{
cost[i]=INF;
}
dijkstra(1);
for(int i=2;i<=n;i++)
{
if(cost[i]<INF)
print(cost[i]);
else
printf("0 ");
}
return 0;
}