Pagini recente » Cod sursa (job #2020166) | Problema satisfiabilităţii formulelor logice de ordinul doi | Cod sursa (job #205874) | Monitorul de evaluare | Cod sursa (job #3215511)
#include <iostream>
#include <queue>
#include <vector>
#include <climits>
using namespace std;
struct ceva{
int nod, cost;
bool operator<(const ceva &temp) const
{
return cost > temp.cost;
}
};
int n, m;
vector<vector<ceva> > adj;
vector<int> dist;
void distra(int startingNode)
{
priority_queue<ceva> q;
dist[1] = 0;
q.push({1, 0});
while(!q.empty())
{
ceva nod = q.top();
q.pop();
for(auto vecin : adj[nod.nod])
{
if(dist[vecin.nod] > dist[nod.nod] + vecin.cost)
{
dist[vecin.nod] = dist[nod.nod] + vecin.cost;
q.push({vecin.nod, dist[vecin.nod]});
}
}
}
}
int main()
{
cin>>n>>m;
adj.resize(n+1);
dist.resize(n+1, INT_MAX);
for(int i = 1; i <= m;i++)
{
int x, y, cost;
cin>>x>>y>>cost;
adj[x].push_back({y, cost});
}
distra(1);
for(int i = 2;i<=n;i++)
cout<<dist[i]<<" ";
}