#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define INF_MIN 100000000 #define INF 1145141919 #define INF_MAX 2147483647 #define LL_MAX 9223372036854775807 #define EPS 1e-10 #define PI acos(-1) #define LL long long using namespace std; #define MAX_N 1001 int N; class cPoint{ public: long double X, Y; cPoint(){} long double calcDistance(cPoint& p1){ return sqrt(pow(X-p1.X, 2) + pow(Y-p1.Y, 2)); } }; cPoint Point[MAX_N]; typedef pair P; vector

Edge[MAX_N]; long double dp[MAX_N]; long double solve(int s, int g){ for(int i = 0; i < N; i++){ dp[i] = sqrt(pow(1e9,2) + pow(1e9, 2)) + 10.0; } dp[s] = 0.0; priority_queue, greater

> que; que.push(P(0.0, s)); while(que.size()){ P p = que.top(); que.pop(); long double dis = p.first; int pos = p.second; if(dp[pos] < dis) continue; for(int i = 0; i < Edge[pos].size(); i++){ int nextPos = Edge[pos][i].second; long double nextd = Edge[pos][i].first; long double d = max(nextd, dis); if(dp[nextPos] > d){ dp[nextPos] = d; que.push(P(d, nextPos)); } } } return dp[g]; } int main(){ cin >> N; for(int i = 0; i < N; i++){ cin >> Point[i].X >> Point[i].Y; } for(int i = 0; i < N; i++){ for(int j = i+1; j < N; j++){ long double dis = Point[i].calcDistance(Point[j]); Edge[i].push_back(P(dis, j)); Edge[j].push_back(P(dis, i)); } } long double d = solve(0, N-1); printf("%d\n", (int)(d + 10 - 1e-10) / 10 * 10); return 0; }