#include<iostream>
#include<algorithm>
using namespace std;
const int INF = (1<<21);
int c,n,m,s,d;
int G[100][100];


int dij(){
  int D[100][11];
  bool V[100][11];
  for(int i=0;i<n;i++){
    for(int j=0;j<c+1;j++){
      D[i][j]=INF;
      V[i][j]=false;
    }
  }
    
  D[s][c]=0;
  while(1){
    int minv=INF,u,v;
    for(int i=0;i<n;i++){
      for(int j=0;j<c+1;j++){
	if(!V[i][j] && D[i][j]<minv){
	  minv=D[i][j];
	  u=i;
	  v=j;
	}
      }
    }

    if(minv==INF){
      break;
    }

    V[u][v]=true;
    for(int i=0;i<n;i++){
      if(G[u][i]==INF) continue;
      D[i][v]=min(D[i][v],D[u][v]+G[u][i]);
      if( v ){
	D[i][v-1]=min(D[i][v-1],D[u][v]+(G[u][i]/2));
      } 
    }
  }
    
    int minv=INF;
    for(int i=0;i<c+1;i++){
      minv=min(minv,D[d][i]);
    }
    return minv;
}



int main(){
  
  while(cin>> c>> n>> m>> s>> d,c){
    s--;
    d--;
    for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
	G[i][j]=INF;
      }
    }

    for(int i=0;i<m;i++){
      int a,b,f;
      cin>> a>> b>> f;
      G[a-1][b-1]=G[b-1][a-1]=f;
    }

    cout<< dij()<< endl;
  }
}