#include <queue>
#include <iostream>
#include <cstring>
using namespace std;constint N =1e4+10000;constint M =1e5+10;int e[M], ne[M], h[N], w[M], idx ;int dis[N];
bool st[M];int k , n , p ;
typedef pair<int,int> Pair ;voidadd(int a ,int b ,int c){
e[idx]= b , ne[idx]= h[a], w[idx]= c , h[a]= idx ++;}voidspfa(){
queue<int> q ;memset(dis ,0x3f, sizeof dis);
q.push(1);
dis[1]=0;
st[1]=1;while(q.size()){int u = q.front();
q.pop();
st[u]=0;for(int i = h[u];i !=-1;i = ne[i]){int j = e[i];int maxn =max(dis[u], w[i]);if(dis[j]> maxn){
dis[j]= maxn;if(!st[j]){
st[j]=1;
q.push(j);}}}}}intmain(){int n , p , k ;
cin >> n >> p >> k ;memset(h ,-1, sizeof h);for(int i =1;i <= p;i ++){int a , b , c ;scanf("%d%d%d",&a ,&b ,&c);add(a , b , c),add(b , a , c);for(int j =1;j <= k;j ++){add(a + n * j , b + n * j , c);add(b + n * j , a + n * j , c);add(a + n *(j -1), b + n * j ,0);add(b + n *(j -1), a + n * j ,0);}}for(int i =1;i <= k ;i ++)add(i * n ,(i +1)* n ,0);// 上面这个其实是为了下面输出做一个方便,下面我贴一个不写这个代码的,其他的都是一样的,就只有这里做了一个处理spfa();printf("%d
",(dis[(k +1)* n]==0x3f3f3f3f?-1: dis[(k +1)* n]));return0;}
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;constint N =2e5+10;int e[N *2], ne[N *2], h[N *2], w[N *2];int dis[1100][1100];int idx ;
bool st[1100];int k ;voidadd(int a ,int b ,int c){
e[++ idx]= b , ne[idx]= h[a], w[idx]= c , h[a]= idx ;}voidspfa(){memset(dis ,0x3f, sizeof dis);
queue<int> q ;
q.push(1);
dis[1][0]=0;
st[1]=true;while(q.size()){int u = q.front();q.pop();
st[u]=false;for(int i = h[u]; i !=-1;i = ne[i]){int v = e[i];if(dis[v][0]>max(dis[u][0], w[i])){
dis[v][0]=max(dis[u][0], w[i]);if(!st[v]){
q.push(v);
st[v]=1;}}for(int p =1;p <= k ;p ++){if(dis[v][p]>min(dis[u][p -1],max(dis[u][p], w[i]))){
dis[v][p]=min(dis[u][p -1],max(dis[u][p], w[i]));if(!st[v]){
q.push(v);
st[v]=1;}}}}}}intmain(){int n , m ;memset(h ,-1, sizeof h);
cin >> n >> m >> k ;for(int i =1;i <= m ;i ++){int a , b , c ;
cin >> a >> b >> c ;add(a , b , c),add(b ,a , c);}spfa();int res =0x3f3f3f3f;for(int i =0;i <= k ;i ++)
res =min(res , dis[n][i]);
cout <<(res ==0x3f3f3f3f?-1: res)<< endl ;return0;}