Pagini recente » Cod sursa (job #2433428) | Cod sursa (job #497046) | Cod sursa (job #109950) | Cod sursa (job #2126506) | Cod sursa (job #2808728)
#include <bits/stdc++.h>
using namespace std;
///int infinit = std::numeric_limits<int>::max();
#define infinit 0x3f3f3f3f
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector<pair<int,int>> costuri[50001];
/*
void dijkstra()
{
dist[1]=0;
priority_queue<pair<int,int>> H; /// Va sorta singur in functie de cea mai mica distanta
H.push({0,1});
while(!H.empty())
{
int u = H.top().second;
H.pop();
for(auto v : costuri[u]) /// Verificam toti vecinii lui u
{
if(dist[v.first] > dist[u] + v.second)
{
dist[v.first] = dist[u] + v.second;
H.push({dist[v.first], v.first});
}
}
}
}*/
int main()
{
int nr_N, nr_M, V[50001] = {}, dist[50001] = {};
in >> nr_N >> nr_M;
for(int i = 1; i <= nr_M; i++)
{
int x, y, c;
in >> x >> y >> c;
costuri[x].push_back({y,c}); /// Muchia de la x plecand in y are costul c
}
for(int i = 2; i <= nr_N; i++)
dist[i] = infinit;
priority_queue<pair<int,int>> H; /// Va sorta singur in functie de cea mai mica distanta
H.push({0,1});
while(!H.empty())
{
int u = H.top().second;
H.pop();
if(V[u] == 1) continue;
else V[u] = 1;
for(auto v : costuri[u]) /// Verificam toti vecinii lui u
{
if(dist[v.first] > dist[u] + v.second)
{
dist[v.first] = dist[u] + v.second;
H.push({dist[v.first], v.first});
}
}
}
for(int i = 2; i <= nr_N; i++)
{
if(dist[i] != infinit)
out << dist[i] << " ";
else
out << "0 ";
}
return 0;
}