#include<string.h>
#include<math.h>
#include<iostream>
#include<queue>
#define go(i,a,b) for(int i=a;i<=b;i++)
#define inf 0x3f3f3f3f
using namespace std;
int x[102],y[102],n,speed,k=1,head[102];
bool inq[102];
double d[102];
struct node
{
——int v,next;
——double w;
}e[204];
void ADD(int u,int v,double w)
{
——e[k].v=v;
——e[k].w=w;
——e[k].next=head[u];
——head[u]=k++;
}
int main()
{
——scanf("%d%d",&n,&speed);
——int fa;
——go(i,1,n)
——{
————scanf("%d%d%d",&x[i],&y[i],&fa);
————int p=x[i]-x[fa],q=y[i]-y[fa];
————double num=sqrt(p*p+q*q)/(speed+0.0);
————ADD(i,fa,num);ADD(fa,i,num);
——}
——go(i,1,n)go(j,1,n)
——{
————if(x[i]==x[j]&&y[i]>y[j])
————ADD(i,j,sqrt((y[i]-y[j])*2/10.0));
——}
——go(i,1,101)d[i]=2147483647;
——d[1]=0;
——queue <int > q;
——q.push(1);
——inq[1]=1;
——while(!q.empty())
——{
————int x=q.front();
————q.pop();
————inq[x]=0;
————for(int i=head[x];i!=0;i=e[i].next)
————{
——————double ww=e[i].w;
——————int vv=e[i].v;
——————if(d[x]<inf&&d[vv]>d[x]+ww)
——————{
————————d[vv]=d[x]+ww;
————————if(!inq[vv])
————————{
——————————q.push(vv);
——————————inq[vv]=1;
————————}
——————}
————}
——}
——printf("%.2lf",d[n]);
——return 0;
}