1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <queue>
5 #define inline __attribute__((optimize("O2")))
6 using namespace std;
7
8 #define maxn 100008
9 #define maxm 1000008
10 #define INF 2000000000
11 #define pa pair<int,int>
12
13 struct line{
14 int u,v,w,nt;
15 }eg[maxm],E[maxm],e[maxm];
16
17 int lt[maxn],fa[maxn],n,m,sum=1,num=0,f[maxn],ans[maxn];
18 int d[maxn],pd[maxn];
19
20 inline void add(int u,int v,int w){
21 eg[++sum].v=v; eg[sum].w=w; eg[sum].nt=lt[u]; lt[u]=sum;
22 }
23 inline void read(int &x){
24 char ch;
25 for (ch=getchar();ch<'0'||ch>'9';ch=getchar()); x=ch-48;
26 for (ch=getchar();ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-48;
27 }
28
29 /*inline void spfa(){
30 for (int i=1;i<=n;i++) d[i]=INF;
31 queue<int> Q;
32 memset(pd,0,sizeof(pd));
33 pd[1]=1; d[1]=0; Q.push(1);
34 while (!Q.empty()){
35 int u=Q.front();
36 for (int i=lt[u];i;i=eg[i].nt){
37 int v=eg[i].v;
38 if (d[u]+eg[i].w<d[v]){
39 d[v]=d[u]+eg[i].w;
40 fa[v]=u;
41 if (!pd[v]){
42 Q.push(v);
43 pd[v]=1;
44 }
45 }
46 }
47 pd[u]=0;
48 Q.pop();
49 }
50 }*/
51
52 inline void dijkstra(){
53 priority_queue<pa,vector<pa>,greater<pa> > Q;
54 memset(pd,0,sizeof(pd));
55 for (int i=1;i<=n;i++) d[i]=INF;
56 d[1]=0; Q.push(make_pair(0,1));
57 while (!Q.empty()){
58 int u=Q.top().second; Q.pop();
59 if (pd[u]) continue; pd[u]=1;
60 for (int i=lt[u];i;i=eg[i].nt)
61 if (d[u]+eg[i].w<d[eg[i].v]){
62 d[eg[i].v]=d[u]+eg[i].w;
63 fa[eg[i].v]=u;
64 Q.push(make_pair(d[eg[i].v],eg[i].v));
65 }
66 }
67 }
68
69 inline bool cmp(line i,line j){
70 return i.w<j.w;
71 }
72
73 inline int find(int x){ return f[x]==x?x:f[x]=find(f[x]); }
74
75 inline void work(int u,int v,int w){
76 int x=find(u),y=find(v);
77 while (x!=y){
78 if (d[x]<d[y]) swap(x,y);
79 ans[x]=w-d[x];
80 num++;
81 f[x]=fa[x];
82 x=find(f[x]);
83 }
84 }
85
86 inline int main(){
87 read(n); read(m);
88 int x,y,z;
89 for (int i=1;i<=m;i++){
90 read(x); read(y); read(z);
91 add(x,y,z); add(y,x,z);
92 e[i].u=x; e[i].v=y; e[i].w=z;
93 }
94 dijkstra();
95 int cnt=0;
96 for (int i=1;i<=m;i++){
97 int u=e[i].u,v=e[i].v,w=e[i].w;
98 if (fa[u]!=v && fa[v]!=u){
99 E[++cnt].u=u;
100 E[cnt].v=v;
101 E[cnt].w=d[u]+d[v]+w;
102 }
103 }
104 sort(E+1,E+cnt+1,cmp);
105 for (int i=1;i<=n;i++) { ans[i]=-1; f[i]=i; }
106 for (int i=1;i<=cnt;i++){
107 work(E[i].u,E[i].v,E[i].w);
108 if (num==n-1) break;
109 }
110 for (int i=2;i<=n;i++) printf("%d\n",ans[i]);
111 }