#include #define REP(i,n) for(int i=0,i##_len=int(n);i>N>>M; int X,Y; cin>>X>>Y; X--;Y--; vector p(N),q(N); REP(i,N) cin>>p[i]>>q[i]; using P = pair ; vector> graph(N); REP(i,M){ int a,b; cin>>a>>b; a--;b--; double c = sqrt(pow(p[a]-p[b],2) + pow(q[a]-q[b],2)); graph[a].push_back(P(c,b)); graph[b].push_back(P(c,a)); } vector dist(N,1e9); priority_queue,greater<>> que; dist[X]=0; que.push(P(0,X)); while(!que.empty()){ P p=que.top();que.pop(); int u=p.second; if(dist[u]alt){ dist[v]=alt; que.push(P(alt,v)); } } } printf("%.16f\n",dist[Y]); }