#include #include #include #include #include #include #include #include #include #include using namespace std; class UnionFindTree{ typedef struct { int parent; int rank; }base_node; vector node; public: UnionFindTree(int n){ node.resize(n); for(int i=0; i node[y].rank){ node[y].parent = x; }else{ node[x].rank++; unite(x,y); } } }; struct edge{ int u; int v; long long cost; bool operator<(const edge& a) const{ return this->cost < a.cost; } }; bool ok(int n, vector& E, long long len){ UnionFindTree uft(n); len *= len; for(auto& e: E){ if(e.cost > len) break; if( !uft.same(e.u, e.v) ){ uft.unite(e.u, e.v); } } return uft.same(0, n-1); } int main(){ int N; scanf("%d", &N); //cin >> N; vector X(N), Y(N); for(int i=0; i> X[i] >> Y[i]; } vector E; for(int i=0; i1){ long long med = (ub+lb)/2; bool valid = ok(N, E, med*10); if(valid){ ub = med; }else{ lb = med; } } printf("%lld\n", ub*10); //cout << ((ub+9)/10) * 10 << endl; return 0; }