#include <bits/stdc++.h>   using namespace std;   struct wektor {     int roz;     int *tab;     int roztab;     wektor() {       tab = new int[1];       roz = 0;       roztab = 1;     }     ~wektor() { delete[] tab; }     int size() { return roz; }     bool empty() { return roz == 0; }     void pop_back() { roz--; }     int &operator[](int ind) { return tab[ind]; }     int operator[](int ind) const { return tab[ind]; }     int back() { return tab[roz - 1]; }     void resize(int cos) {       if (cos > roztab) {         int *tmp;         tmp = new int[2 * cos];         for (int i = 0; i < roz; i++) {           tmp[i] = tab[i];         }         delete[] tab;         tab = tmp;         roztab = 2 * cos;       } else {         if (cos < roz) {           roz = cos;         }       }     }     void push_back(int elem) {       resize(roz + 1);       tab[roz] = elem;       roz = roz + 1;       ;     }   };   wektor slo[100005];   int vis[100005];   int gleb[100005];   double wynik;   void dfs(int v, int g) {     wynik += double(1) / g;     vis[v] = 1;     for (int i = 0; i < slo[v].size(); i++) {       int aktv = slo[v][i];       if (vis[aktv] == 0) {         dfs(aktv, g + 1);       }     }   }   int main() {     int n;     cin >> n;     for (int i = 1; i <= n - 1; i++) {       int a, b;       cin >> a >> b;       slo[a].push_back(b);       slo[b].push_back(a);     }     dfs(1, 1);     printf( %.7lf n , wynik);     return 0;   }   