Pagini recente » Borderou de evaluare (job #1585882) | Cod sursa (job #2402834) | Cod sursa (job #682213) | Cod sursa (job #3304867) | Cod sursa (job #3327935)
#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9+7;
int n,m;
bitset<50001>vap;
int dist[50001];
vector<pair<int,int>>v[50001];
void dijkstra(int nod) {
set<pair<int,int>>s;
for(int i = 1; i <= n; i++)
dist[i] = INF;
dist[nod] = 0;
s.insert({0,nod});
while(!s.empty()) {
auto it= s.begin();
int curr = (*it).second;
int cost = (*it).first;
//vap[curr] = 1;
s.erase(it);
for(pair<int,int> i : v[curr]) {
int nod_nou = i.first;
int cost_nou = i.second;
if(dist[curr] + cost_nou < dist[nod_nou]) {
dist[nod_nou] = dist[curr] + cost_nou;
auto it1 = s.find({dist[nod_nou],nod_nou});
s.erase(it1);
s.insert({dist[nod_nou],nod_nou});
}
}
}
}
int main() {
cin >> n >> m;
for(int i = 1; i <= m; i++) {
int st,dr,c;
cin >> st >> dr >> c;
v[st].push_back({dr,c});
v[dr].push_back({st,c});
}
dijkstra(1);
for(int i = 2; i <= n; i++)
cout << dist[i] << ' ';
return 0;
}