#include <bits/stdc++.h> #define fastio() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) #define pb push_back #define mp make_pair #define MOD 1000000007 #define min3(a,b,c) min(a,min(b,c)) #define max3(a,b,c) max(a,max(b,c)) #define loop(i,a,n) for(int i=a;i<n;++i) #define arrin(arr,n) for(int i=0; i < n; ++i) cin>>arr[i]; #define arrout(arr,n) for(int i=0; i < n; ++i) cout<<arr[i]<<" ";cout<<nl; #define nl "\n" #define ff first #define ss second #define _USE_MATH_DEFINES // M_E : e M_PI :pi M_SQRT2:sqrt(2) typedef unsigned long long ull; typedef long long ll; typedef long double ld; struct compare { bool operator()(const int& l, const int& r) { return l > r; //min: > ; max: < } }; using namespace std; priority_queue<int,vector<int>, compare > pq; ll mc[200001],cost[200001],vis[200001]; vector <vector <pair<int,ll> > > g(200001); ll dfs (int curr) { vis[curr]=1; //mc[curr]=cost[curr]; for (auto x: g[curr]) { //if (curr==1) // cout <<x.ff<<" "; if (vis[x.ff]) { mc[curr]=min(mc[curr],2*x.ss+mc[x.ff]); // cout <<mc[curr]<<nl; } else { mc[curr]=min(mc[curr],2*x.ss+dfs(x.ff)); // cout <<mc[curr]<<nl; } } for (auto x: g[curr]) { mc[x.ff]=min(mc[x.ff],2*x.ss+mc[curr]); } return mc[curr]; } int main() { fastio(); int n,m; cin >>n >>m; loop (i,0,m) { ll u,v,w; cin >>u >>v >>w; g[u].pb(mp(v,w)); g[v].pb(mp(u,w)); } memset (mc,-1,sizeof(mc)); memset (vis,0,sizeof(vis)); loop (i,0,n) { cin >>mc[i+1]; //mc[i+1]=cost[i+1]; } for (int i=1; i<=n; i++) { if (!vis[i]) dfs(i); } for (int i=1; i<=n; i++) cout <<mc[i]<<" "; }