wa9个点
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll kk,cnt,t,n,m,s,ka,kb,kc,dis[200001][11],vis[200001][11],head[200001],k,kw,minn=100000000000;
struct node{
ll to,w,nextt;
}a[1000001];
struct priority{
ll ans,id,ti;
bool operator <(const priority &x)const {return x.ans<ans;}
};
priority_queue<priority> q;
int main(){
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
for(int i=1;i<=n;i++)for(int j=1;j<=k;j++)dis[i][j]=1000000000;
dis[s][0]=0;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&ka,&kb,&kc);
a[++cnt].to=kb;
a[cnt].w=kc;
a[cnt].nextt=head[ka];
head[ka]=cnt;
}
q.push((priority){0,s,0});
while(!q.empty()){
priority jk=q.top();
q.pop();
ll o=jk.id,kk=jk.ti;
if(!vis[o][kk]){
vis[o][kk]=1;
for(int i=head[o];i;i=a[i].nextt){
ll u=a[i].to;
if(dis[u][kk]>dis[o][kk]+a[i].w&&!vis[u][kk]){
dis[u][kk]=dis[o][kk]+a[i].w;
q.push((priority){dis[u][kk],u,kk});
}
if(kk<k){
if(dis[u][kk+1]>dis[o][kk]&&!vis[u][kk+1]){
dis[u][kk+1]=dis[o][kk];
q.push((priority){dis[u][kk+1],u,kk+1});
}
}
}
}
}
for(int i=1;i<=k;i++)minn=min(minn,dis[t][i]);
cout<<minn;
return 0;
}