#include <bits/stdc++.h>   using namespace std;   struct Edge {     int from, to;     Edge(int f, int t) : from(f), to(t) {}   };   vector<Edge> edges;   vector<int> G[100005];   int h[100005];   void add_edge(int from, int to) {     edges.push_back(Edge(from, to));     int m = edges.size();     G[from].push_back(m - 1);     return;   }   void bfs(int x) {     queue<int> Q;     Q.push(x);     int cnt = 1, first = 1;     h[x] = cnt;     while (!Q.empty()) {       int u = Q.front();       Q.pop();       if (h[u] == cnt && first) {         cnt++;         first = 0;       }       for (int i = 0; i < G[u].size(); i++) {         Edge &e = edges[G[u][i]];         if (!h[e.to]) {           h[e.to] = cnt;           Q.push(e.to);         }       }       first = 1;     }   }   int main() {     int n;     while (scanf( %d , &n) != EOF) {       for (int i = 0; i < n - 1; i++) {         int u, v;         scanf( %d %d , &u, &v);         add_edge(u, v);         add_edge(v, u);       }       memset(h, 0, sizeof(h));       bfs(1);       double sum = 0.0;       for (int i = 1; i <= n; i++) {         if (h[i] != 0) sum += (double)1 / h[i];       }       printf( %lf n , sum);     }     return 0;   }   