Pagini recente » Cod sursa (job #3133122) | Cod sursa (job #1031673) | Cod sursa (job #2336600) | Cod sursa (job #1067783) | Cod sursa (job #3040471)
#include<fstream>
#include<vector>
#include<queue>
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int const N = 250003;
struct edge{
int x , y , w;
edge(){}
edge(int _x , int _y , int _w) : x(_x) , y(_y) , w(_w){}
int oth(int _x){
return (x ^ y ^ _x);
}
}mc[N];
int n , m , a , b , c;
int dp[N];
vector<int> v[N];
void dijkstra(){
fill(dp + 1 , dp + 1 + n , (1 << 30));
priority_queue<pii> h;
h.emplace(0 , 1);
dp[1] = 0;
while(!h.empty()){
int x = h.top().se;
int w = -h.top().fi;
h.pop();
if(w != dp[x])
continue;
for(int e : v[x]){
int y = mc[e].oth(x);
if(dp[y] > dp[x] + mc[e].w){
dp[y] = dp[x] + mc[e].w;
h.emplace(-dp[y] , y);
}
}
}
}
int main(){
fin >> n >> m;
for(int i = 1 ; i <= n ; ++ i){
fin >> a >> b >> c;
mc[i] = {a , b , c};
v[a].push_back(i);
v[b].push_back(i);
}
dijkstra();
for(int i = 2 ; i <= n ; ++ i)
fout << (dp[i] == (1 << 30) ? 0 : dp[i]) << ' ';
fout << '\n';
return 0;
}