Pagini recente » Cod sursa (job #3213464) | Cod sursa (job #866435) | Statistici hajek hajnalka (hajek_hajni) | Cod sursa (job #474533) | Cod sursa (job #3253359)
#include <iostream>
#include <queue>
#include <climits>
#include <vector>
#include <algorithm>
using namespace std;
bool vis[50005];
int d[50005], n;
vector<pair<int, int>> adj[50005];
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> Q;
int findMin()
{
while(vis[Q.top().second]) Q.pop();
int nod = Q.top().second;
vis[nod] = 1;
Q.pop();
return nod;
}
void dijkstra(pair<int, int> nod)
{
Q.push(nod);
for(int i = 1; i <= n; ++i)
{
int min = findMin();
for(auto it : adj[min])
{
if(!vis[it.second])
{
if(d[it.second] > d[min] + it.first)
d[it.second] = d[min] + it.first;
Q.push({d[it.second], it.second}); }
}
}
}
int main()
{
(void)! freopen("dijkstra.in", "r", stdin);
(void)! freopen("dijkstra.out", "w", stdout);
int m, x, y, z; cin >> n >> m;
while(m--)
{
cin >> x >> y >> z;
adj[x].push_back({z, y});
}
for(int i = 2; i <= n; ++i)
d[i] = INT_MAX;
dijkstra({0, 1});
for(int i = 2; i <= n; ++i)
{
if(d[i] == INT_MAX) d[i] = 0;
cout << d[i] << ' ';
}
return 0;
}