#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, M = N * 2 + 10, MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
inline int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
inline int lowbit(int first) { return first & -first; }
template <typename _T>
inline void read(_T &f) {
  f = 0;
  _T fu = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') {
      fu = -1;
    }
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    f = (f << 3) + (f << 1) + (c & 15);
    c = getchar();
  }
  f *= fu;
}
template <typename T>
void print(T first) {
  if (first < 0) putchar('-'), first = -first;
  if (first < 10)
    putchar(first + 48);
  else
    print(first / 10), putchar(first % 10 + 48);
}
template <typename T>
void print(T first, char t) {
  print(first);
  putchar(t);
}
int n;
int h[N], e[M], ne[M], idx;
void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx++; }
int dep[N];
void dfs(int u, int fa) {
  dep[u] = dep[fa] + 1;
  for (int i = h[u]; ~i; i = ne[i]) {
    int v = e[i];
    if (v == fa) continue;
    dep[v] = dep[u] + 1;
    dfs(v, u);
  }
}
int main() {
  read(n);
  memset(h, -1, sizeof(h));
  for (int i = 1; i < n; i++) {
    int a, b;
    read(a), read(b);
    add(a, b);
    add(b, a);
  }
  dep[0] = 0;
  dfs(1, 0);
  double res = 0;
  for (int i = 1; i <= n; i++) res = res + 1.0 / (double)dep[i];
  printf("%.6f\n", res);
}
