Advertisement
at3107

Untitled

Dec 26th, 2020
749
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define F first
  4. #define S second
  5. #define ll long long
  6.  
  7. int main()
  8. {
  9.     ll n,m,p,q,k,hell=1e12;
  10.     cin>>n>>m>>p>>q>>k;
  11.     vector<pair<ll,ll> > adj[n+1];
  12.     vector<vector<bool> >vis(n+1,vector<bool>(k+1,0));
  13.     vector<vector<ll> >dis(n+1,vector<ll>(k+1,hell));
  14.     for(int i=0;i<m;i++)
  15.     {
  16.         ll x,y,z;
  17.         cin>>x>>y>>z;
  18.         adj[x].push_back({y,z});
  19.         adj[y].push_back({x,z});
  20.     }
  21.     for(int i=0;i<=k;i++) dis[p][i]=0;
  22.     priority_queue<tuple<ll,ll,ll> >pq;
  23.     pq.push({0,p,0});
  24.     while(!pq.empty())
  25.     {
  26.         ll x,y,z;
  27.         tie(x,y,z)=pq.top();
  28.         pq.pop();
  29.         if(vis[y][z]==1) continue;
  30.         vis[y][z]=1;
  31.         for(auto i:adj[y])
  32.         {  
  33.             if(dis[i.F][z]>dis[y][z]+i.S)
  34.             {
  35.                 dis[i.F][z]=dis[y][z]+i.S;
  36.                 pq.push({-dis[i.F][z],i.F,z});
  37.             }
  38.             if(z<k)
  39.             {
  40.                 if(dis[i.F][z+1]>dis[y][z])
  41.                 {
  42.                     dis[i.F][z+1]=dis[y][z];
  43.                     pq.push({-dis[i.F][z+1],i.F,z+1});
  44.                 }
  45.             }
  46.         }
  47.     }
  48.     if(dis[p][q]==hell) cout<<-1;
  49.     else cout<<dis[p][q];
  50.     // for(int i=1;i<=n;i++)
  51.     // {
  52.         // ll ans=hell;
  53.         // for(int j=0;j<=k;j++) ans=min(ans,dis[i][j]);
  54.         // cout<<ans<<' ';
  55.     // }
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement