#include <bits/stdc++.h>
namespace IO {
const unsigned int Buffsize = 1 << 15, Output = 1 << 23;
static char Ch_[Buffsize], *S_ = Ch_, *T_ = Ch_;
static char Out[Output], *nowps = Out;
inline void flush() {
  fwrite(Out, 1, nowps - Out, stdout);
  nowps = Out;
}
template <class T>
inline bool chkmax(T &_, T __) {
  return _ < __ ? _ = __, 1 : 0;
}
template <class T>
inline bool chkmin(T &_, T __) {
  return _ > __ ? _ = __, 1 : 0;
}
template <class T>
inline void read(T &_) {
  _ = 0;
  static char __;
  T ___ = 1;
  for (__ = ((S_ == T_) && (T_ = (S_ = Ch_) + fread(Ch_, 1, Buffsize, stdin),
                           S_ == T_)
                 ? 0
                 : *S_++);
       !isdigit(__);
       __ = ((S_ == T_) && (T_ = (S_ = Ch_) + fread(Ch_, 1, Buffsize, stdin),
                           S_ == T_)
                 ? 0
                 : *S_++))
    if (__ == '-') ___ = -1;
  for (; isdigit(__);
       __ = ((S_ == T_) && (T_ = (S_ = Ch_) + fread(Ch_, 1, Buffsize, stdin),
                           S_ == T_)
                 ? 0
                 : *S_++))
    _ = (_ << 3) + (_ << 1) + (__ ^ 48);
  _ *= ___;
}
template <class T>
inline void write(T _, char __ = '\n') {
  if (!_) *nowps++ = ('0');
  if (_ < 0) *nowps++ = ('-'), _ = -_;
  static unsigned int sta[111], tp;
  for (tp = 0; _; _ /= 10) sta[++tp] = _ % 10;
  for (; tp; *nowps++ = (sta[tp--] ^ 48))
    ;
  *nowps++ = (__);
}
inline void procStatus() {
  std::ifstream t("/proc/self/status");
  std::cerr << std::string(std::istreambuf_iterator<char>(t),
                           std::istreambuf_iterator<char>());
}
}  // namespace IO
using namespace std;
using namespace IO;
const int N = 1e5 + 10;
vector<int> G[N];
int n, dep[N];
void dfs(int first) {
  for (auto v : G[first])
    if (!dep[v]) dep[v] = dep[first] + 1, dfs(v);
}
int main() {
  int first, second;
  long double ans = 0;
  read(n);
  for (register int i = (2), i_end_ = (n); i <= i_end_; ++i) {
    read(first), read(second);
    G[first].push_back(second), G[second].push_back(first);
  }
  dfs(dep[1] = 1);
  for (register int i = (1), i_end_ = (n); i <= i_end_; ++i)
    ans += 1.0 / dep[i];
  printf("%Lf", ans);
  return flush(), 0;
}
