-
飞行路线
- HYSBZ - 2763
-
#include<bits/stdc++.h> using namespace std; #define maxn 10555 #define inf 0x3f3f3f3f int n,m,k,s,t,u,v,ans,w; int dis[maxn][12],vis[maxn][15]; struct node { int y,z; } temp; vector<node>mmp[maxn]; struct pp { int v; long long w,kk; pp(int _v=0,long long _w=0,int _kk=0):v(_v),w(_w),kk(_kk) {} bool operator<(const pp&h)const { return w>h.w; } }; void dij() { priority_queue<pp>q; for(int i=0; i<n; i++) for(int j=0; j<11; j++) dis[i][j]=inf; for(int i=0; i<11; i++) dis[s][i]=0; q.push(pp(s,0,0)); while(!q.empty()) { int cnt=q.top().kk; int net=q.top().v; q.pop(); for(int i=0; i<mmp[net].size(); i++) { int v=mmp[net][i].y; int w=mmp[net][i].z; if(dis[net][cnt]+w<dis[v][cnt]) { dis[v][cnt]=dis[net][cnt]+w; q.push(pp(v,dis[v][cnt],cnt)); } if(cnt<k&&dis[net][cnt]<dis[v][cnt+1]) { dis[v][cnt+1]=dis[net][cnt]; q.push(pp(v,dis[v][cnt+1],cnt+1)); } } } } int main() { ans=inf; cin>>n>>m>>k>>s>>t; while(m--) { cin>>u>>v>>w; temp.y=v; temp.z=w; mmp[u].push_back(temp); temp.y=u; temp.z=w; mmp[v].push_back(temp); } dij(); for(int i=0; i<=k; i++) ans=min(dis[t][i],ans); cout<<ans<<endl; return 0; }
飞行路线 HYSBZ-分层思想.
最新推荐文章于 2021-07-16 10:30:16 发布