Pagini recente » Cod sursa (job #265327) | Cod sursa (job #1262732) | Cod sursa (job #2510678) | Cod sursa (job #1013647) | Cod sursa (job #2254908)
#include <bits/stdc++.h>
using namespace std;
struct arc
{
int nod, cost;
bool operator<(const arc& a) const
{
return cost > a.cost;
}
};
int lh; /// ultima pos ocupata
vector<arc> g[50005];
int dist[50005];
int n;
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int m, a, b, c;
scanf("%d%d", &n, &m);
while(m--)
{
scanf("%d%d%d", &a, &b, &c);
g[a].push_back({b, c});
}
vector<arc> h;
memset(dist, 0x3f, sizeof(dist));
dist[1] = 0;
for(int i = 0; i < g[1].size(); i++)
{
h.push_back(g[1][i]);
dist[g[1][i].nod] = g[1][i].cost;
push_heap(h.begin(), h.end());
}
while(!h.empty())
{
arc a = h[0];
pop_heap(h.begin(), h.end());
h.pop_back();
if(a.cost != dist[a.nod])
continue;
for(int i = 0; i < g[a.nod].size(); i++)
{
if(dist[g[a.nod][i].nod] > a.cost + g[a.nod][i].cost)
{
dist[g[a.nod][i].nod] = a.cost + g[a.nod][i].cost;
arc na = g[a.nod][i];
na.cost += a.cost;
h.push_back(na);
push_heap(h.begin(), h.end());
}
}
}
for(int i = 2; i <= n; i++)
printf("%d ", dist[i] == 0x3f3f3f3f ? 0 : dist[i]);
return 0;
}