Pagini recente » Cod sursa (job #3240149) | Cod sursa (job #3293150) | Cod sursa (job #2485329)
#include<bits/stdc++.h>
#define pii pair<int,int>
#define x first
#define y second
#define N 50010
#define inf 1e9+1
using namespace std;
int d[N], n, m;
set<pii> S;
vector<pii>V[N];
bool inS[N];
void Dijkstra(int start) {
d[start] = 0;
for (int i=2; i<=n; i++) d[i] = inf;
for (auto it:V[start]) {
d[it.x] = min(d[it.x], it.y);
S.insert({it.x, it.y});
}
S.insert({1, 0}); inS[1] = 1;
while (S.size()) {
auto top = *S.begin();
int x = top.x;
int c = top.y;
S.erase(S.begin());
inS[x] = 0;
if (d[x] < c) continue;
for (auto it:V[x]) {
if (d[it.x] > d[x] + it.y) {
d[it.x] = d[x] + it.y;
if (!inS[it.x]) {
inS[it.x] = 1;
S.insert({it.x, d[it.x]});
}
}
}
}
}
int main() {
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
cin>>n>>m;
for (int i=0; i<m; i++) {
int x,y, c; cin>>x>>y>>c;
V[x].push_back({y,c});
V[y].push_back({x,c});
}
Dijkstra(1);
for (int i=2; i<=n; i++) {
cout<<(d[i]==inf?0:d[i])<<" ";
}
return 0;
}