Pagini recente » Cod sursa (job #3280651) | Cod sursa (job #3272109) | Cod sursa (job #2370339) | Cod sursa (job #2628459) | Cod sursa (job #2207541)
#include <iostream>
#include <vector>
#include <set>
#include <cstdio>
#define NMAX 50010
#define inf 1<<30
using namespace std;
int dist[NMAX], N, M;
vector<pair<int, int> > G[NMAX];
void Dijkstra(int nodStart) {
for(int i=1;i<=N;i++)
dist[i] = inf;
dist[nodStart] = 0;
set<pair<int, int> > T;
T.insert({nodStart, 0});
while(!T.empty()) {
int nod = (*T.begin()).first;
int val = (*T.begin()).second;
T.erase(T.begin());
for(int i=0;i < G[nod].size(); i++) {
if(dist[G[nod][i].first] > val + G[nod][i].second) {
dist[G[nod][i].first] = G[nod][i].second + val;
T.insert({G[nod][i].first, G[nod][i].second + val});
}
}
}
}
int main()
{
int a, b, c;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
cin>>N>>M;
for(int i=0; i< M;i++) {
cin>>a>>b>>c;
G[a].push_back({b, c});
}
Dijkstra(1);
for(int i=2;i<=N;i++)
cout<<dist[i]<<" ";
}