Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define M 101000
- #define INF 1e18+7
- #define ll long long
- #define pii pair<int,int>
- #define pll pair<ll,ll>
- #define mp make_pair
- vector<pll>adj[M];
- ll dis[M];
- ll parent[M];
- ll start;
- void dijkstra(ll source)
- {
- for(ll i=0;i<M;i++)
- {
- dis[i]=INF;
- parent[i]=-1;
- }
- priority_queue<pair<ll,ll>,vector<pair<ll,ll> >,greater<pair<ll,ll> > >pq;
- dis[source]=0;
- pq.push(mp(source,0));
- while(!pq.empty())
- {
- pll p=pq.top();
- pq.pop();
- // cout<<p.first<<endl;
- if(p.second>dis[p.first])
- continue;
- for(ll i=0;i<adj[p.first].size();i++)
- {
- pii v=adj[p.first][i];
- ll city=v.first;
- ll d=v.second;
- if(dis[city]>d+dis[p.first])
- {
- dis[city]=d+dis[p.first];
- pq.push(mp(city,dis[city]));
- parent[city]=p.first;
- }
- }
- }
- return;
- }
- void printpath(ll v)
- {
- if(v==start)
- {
- cout<<v<<" ";
- return;
- }
- printpath(parent[v]);
- cout<<v<<" ";
- }
- int main()
- {
- ll m,n;
- cin>>n>>m;
- while(m--)
- {
- int u,v,w;
- cin>>u>>v>>w;
- adj[u].push_back(mp(v,w));
- adj[v].push_back(mp(u,w));
- }
- start=1;
- dijkstra(1);
- if(dis[n]==INF)
- {
- cout<<-1<<endl;
- return 0;
- }
- printpath(n);
- cout<<endl;
- //cout<<dis[n]<<endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment