1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 typedef pair<int,int> pii;
5 const int N=1e6;
6 int path[N];
7 ll dis[N];
8 vector<pii>G[N];
9 int n,m;
10 void dijkstra()
11 {
12 dis[1]=0;
13 priority_queue<pii,vector<pii>,greater<>>q;
14 q.push({0,1});
15 while(q.size())
16 {
17 auto [d,u]=q.top();
18 q.pop();
19 if(u==n)break;
20 for(auto &[v,w]:G[u])
21 {
22 if(dis[u]+w<dis[v])
23 {
24 dis[v]=dis[u]+w;
25 path[v]=u;
26 q.push({dis[v],v});
27 }
28 }
29
30 }
31 }
32 int main()
33 {
34
35 scanf("%d%d",&n,&m);
36 memset(dis,0x3f,sizeof(dis));
37 memset(path,-1,sizeof(path));
38 for(int i=1;i<=m;i++)
39 {
40 int u,v,w;
41 scanf("%d%d%d",&u,&v,&w);
42 G[u].push_back({v,w});
43 G[v].push_back({u,w});
44 }
45 dijkstra();
46 if(dis[n]==dis[n+1])puts("-1");
47 else
48 {
49 vector<int>ans;
50 ans.push_back(n);
51 for(int i=path[n];~i;i=path[i]) ans.push_back(i);
52 int sz=ans.size();
53 for(int i=sz-1;~i;i--)printf("%d ",ans[i]);
54 }
55 return 0;
56 }
![]()