Pagini recente » Cod sursa (job #490470) | Cod sursa (job #1386330) | Cod sursa (job #1859221) | Cod sursa (job #3199467) | Cod sursa (job #1550665)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int NMAX = 50005;
const int INF = 1e9;
vector < pair <int,int> > G[NMAX];
vector < int > T;
int D[NMAX],n;
bool cmp(const int &a,const int &b){
return(D[a] > D[b]);
}
inline void dijkstra(){
int nod;
T.push_back(1);
make_heap(T.begin(),T.end(),cmp);
for(int i = 2; i <= n; i++)
D[i] = INF;
while(!T.empty()){
nod = T.front();
pop_heap(T.begin(),T.end(),cmp);
T.pop_back();
for(int i = 0; i < G[nod].size();i++){
if(D[G[nod][i].second] > G[nod][i].first + D[nod]){
D[G[nod][i].second] = G[nod][i].first + D[nod];
T.push_back(G[nod][i].second);
push_heap(T.begin(),T.end(),cmp);
}
}
}
}
int main()
{
int m,x,y,c;
fin >> n >> m;
for(int j = 1; j <= m; j++){
fin >> x >> y >> c;
G[x].push_back({c,y});
G[y].push_back({c,x});
}
dijkstra();
for(int i = 2; i <= n;i++)
fout << D[i] << " ";
return 0;
}