Pagini recente » Cod sursa (job #2821404) | Cod sursa (job #3293493) | Cod sursa (job #1149380) | Cod sursa (job #1274002) | Cod sursa (job #3030661)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
using PII = pair < int, int >;
const int NMAX = 1e5 + 3;
const int INF = 1e9 + 3;
int N, M, P;
vector < PII > G[NMAX];
long long d[NMAX];
bool sel[NMAX];
priority_queue < PII, vector < PII >, greater < PII > > H;
void Read()
{
fin >> N >> M;
for(int i = 1; i <= M; ++i) {
int u, v, cost;
fin >> u >> v >> cost;
G[u].push_back({cost, v});
///G[v].push_back({cost, u});
}
}
void Dijkstra(int root)
{
for(int i = 1; i <= N; ++i)
d[i] = INF;
d[root] = 0;
sel[root] = true;
for(auto it: G[root]) {
H.push(it);
d[it.second] = it.first;
}
for(int i = 1; i <= N; ++i) {
while(!H.empty() && sel[H.top().second])
H.pop();
if(H.empty())
break;
PII h = H.top();
int nod = h.second;
int dist = h.first;
sel[nod] = true;
for(auto it: G[nod]) {
if(!sel[it.second] && d[it.second] > dist + it.first) {
H.push({dist + it.first, it.second});
d[it.second] = dist + it.first;
}
}
}
}
int main()
{
Read();
Dijkstra(1);
for(int i = 2; i <= N; ++i) {
if(d[i] == INF) {
fout << "0 ";
}
fout << d[i] << ' ';
}
return 0;
}