#include <bits/stdc++.h>
using namespace std;
template <typename T, typename TT>
ostream& operator<<(ostream& out, pair<T, TT> t) {
  return out << "(" << t.first << "," << t.second << ")";
}
template <typename T>
ostream& operator<<(ostream& out, vector<T> t) {
  for (int i = 0; i < ((int)(t).size()); i++) out << t[i] << " ";
  return out;
}
template <typename T>
inline bool cmin(T& a, const T& b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
inline bool cmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
template <typename T>
void read(T& x) {
  int f = 1;
  char ch;
  x = 0;
  while (!isdigit(ch = getchar()))
    ;
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  x *= f;
}
const int NX = 101234, mod = 998244353;
int n;
vector<int> e[NX];
int qow(int a, int b) {
  int res = 1;
  while (b) {
    if (b & 1) res = (long long)res * a % mod;
    a = (long long)a * a % mod;
  }
  return res;
}
double ans = 0;
void dfs(int x, int fa = 0, int d = 1) {
  ans += 1.0 / d;
  for (int y : e[x]) {
    if (y != fa) dfs(y, x, d + 1);
  }
}
int main() {
  read(n);
  for (int i = 1, u, v; i < n; i++) {
    read(u);
    read(v);
    e[u].push_back(v);
    e[v].push_back(u);
  }
  dfs(1);
  printf("%.10lf\n", ans);
  return 0;
}
