Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define F first
- #define S second
- #define ll long long
- int main()
- {
- ll n,m,p,q,k,hell=1e12;
- cin>>n>>m>>p>>q>>k;
- vector<pair<ll,ll> > adj[n+1];
- vector<vector<bool> >vis(n+1,vector<bool>(k+1,0));
- vector<vector<ll> >dis(n+1,vector<ll>(k+1,hell));
- for(int i=0;i<m;i++)
- {
- ll x,y,z;
- cin>>x>>y>>z;
- adj[x].push_back({y,z});
- adj[y].push_back({x,z});
- }
- for(int i=0;i<=k;i++) dis[p][i]=0;
- priority_queue<tuple<ll,ll,ll> >pq;
- pq.push({0,p,0});
- while(!pq.empty())
- {
- ll x,y,z;
- tie(x,y,z)=pq.top();
- pq.pop();
- if(vis[y][z]==1) continue;
- vis[y][z]=1;
- for(auto i:adj[y])
- {
- if(dis[i.F][z]>dis[y][z]+i.S)
- {
- dis[i.F][z]=dis[y][z]+i.S;
- pq.push({-dis[i.F][z],i.F,z});
- }
- if(z<k)
- {
- if(dis[i.F][z+1]>dis[y][z])
- {
- dis[i.F][z+1]=dis[y][z];
- pq.push({-dis[i.F][z+1],i.F,z+1});
- }
- }
- }
- }
- if(dis[p][q]==hell) cout<<-1;
- else cout<<dis[p][q];
- // for(int i=1;i<=n;i++)
- // {
- // ll ans=hell;
- // for(int j=0;j<=k;j++) ans=min(ans,dis[i][j]);
- // cout<<ans<<' ';
- // }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement