改到90就行
#include<bits/stdc++.h>
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;
struct graph{
private:
struct edge{int to,w;bool operator<(edge b)const{return to==b.to?w<b.w:to<b.to;}};
vector<vector<edge> >g;
public:
graph(){memset(this,0,sizeof(this));}
graph(int n){g.resize(n+1);}
void push(int u,int v,int w){g[u].push_back({v,w});}
vector<edge>&edge(int i){return g[i];}
};int n,m,k,a,b;int dis[51];
struct dijnode{int u;int g;bool operator<(dijnode b)const{return b.g+dis[b.u]<g+dis[u];}};
struct node{
int u;int g;basic_string<int>p;long long b;
bool operator<(node b)const{
if(b.g+dis[b.u]!=g+dis[u])return b.g+dis[b.u]<g+dis[u];
return b.p<p;
}
};void dijkstra(graph g,int s,int*dis){
memset(dis,0x3f,sizeof(dis));
priority_queue<dijnode>q;
dis[s]=0;q.push({0,s});
while(!q.empty()){
int u=q.top().u;
if(q.top().g>dis[u]){q.pop();continue;}
q.pop();
for(auto e:g.edge(u)){
if(dis[e.to]>dis[u]+e.w){
dis[e.to]=dis[u]+e.w;
q.push({dis[e.to],e.to});
}
}
}
}void astar(graph g,int s,int t,int k){
priority_queue<node>q;
q.push({s,0,{s},(1ll<<s)});int res=0;
while(!q.empty()){
int u=q.top().u;int d=q.top().g;
basic_string<int>p=q.top().p;long long b=q.top().b;
if(u==t)res++;
if(res==k){
cout<<p[0];
for(int i=1;i<p.size();i++)cout<<'-'<<p[i];
return;
}q.pop();
for(auto e:g.edge(u)){
int v=e.to,w=e.w;
if(!((b>>v)&1)){
p.push_back(v);b+=(1ll<<v);
q.push({v,d+w,p,b});
b-=(1ll<<v);p.pop_back();
}
}
}cout<<"No";
}int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m>>k>>a>>b;graph g(n),h(n);
for(int u,v,w;m--;){
cin>>u>>v>>w;
g.push(u,v,w);
h.push(v,u,w);
}for(int i=1;i<=n;i++)sort(g.edge(i).begin(),g.edge(i).end());
dijkstra(h,1,dis);
astar(g,a,b,k);
}