Pagini recente » Cod sursa (job #428919) | Cod sursa (job #2823968) | Concursuri | Cod sursa (job #2279157) | Cod sursa (job #3215544)
#include <fstream>
#include <queue>
#include <vector>
#include <climits>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
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;
vector<int> vizitat;
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(!vizitat[vecin.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);
vizitat.resize(n+1, false);
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++)
if(dist[i] == INT_MAX)
cout<<0<<" ";
else cout << dist[i]<<" ";
}