ACW 4196. 最短路径

 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 }

 

 

posted @ 2021-12-11 21:43  matt-11  阅读(31)  评论(0)    收藏  举报