Pagini recente » Cod sursa (job #3351185) | Borderou de evaluare (job #2493103) | Cod sursa (job #2038993) | Cod sursa (job #3317634) | Cod sursa (job #3323535)
#include <fstream>
#include <queue>
#include <set>
#include <algorithm>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int INF = 1e9;
int N, M;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
void Dijkstra(int sursa, vector<vector<pair<int, int>>> &edg, vector<int> &dist){
dist[sursa] = 0;
pq.push({dist[sursa], sursa});
vector<int> viz(N+1, 0);
while(!pq.empty()){
int nod = pq.top().second;
int cost = pq.top().first;
pq.pop();
if(viz[nod]) continue;
viz[nod] = 1;
for(auto &v : edg[nod]){
int w = v.second;
int p = v.first;
if(dist[p] > dist[nod] + w){
dist[p] = dist[nod] + w;
pq.push({dist[p], p});
}
}
}
}
int main(){
fin>>N>>M;
vector<vector<pair<int, int>>> edg;
vector<int> dist(N+1, INF);
edg.resize(N+1);
while(M--){
int u, v, w;
fin>>u>>v>>w;
edg[u].push_back({v, w});
}
Dijkstra(1, edg, dist);
for(int i=2; i<=N; ++i){
if(dist[i] == INF)
fout<<0<<" ";
else
fout<<dist[i]<<" ";
}
return 0;
}