func_code_string: #include <bits/stdc++.h>   using namespace std;   clock_t __stt;   inline void TStart() { __stt = clock(); }   inline void TReport() {     printf(  nTaken Time : %.3lf sec n ,            (double)(clock() - __stt) / CLOCKS_PER_SEC);   }   template <typename T>   T MIN(T a, T b) {     return a < b ? a : b;   }   template <typename T>   T MAX(T a, T b) {     return a > b ? a : b;   }   template <typename T>   T ABS(T a) {     return a > 0 ? a : (-a);   }   template <typename T>   void UMIN(T &a, T b) {     if (b < a) a = b;   }   template <typename T>   void UMAX(T &a, T b) {     if (b > a) a = b;   }   int n, q, fa[100005], deg[100005];   double p[100005], s[100005], ini;   vector<int> adj[100005];   void dfs(int ver) {     if (!ver) fa[ver] = -1;     int i;     ini += ((double)deg[ver]) * p[ver];     for (i = 0; i < (int)adj[ver].size(); ++i) {       if (adj[ver][i] != fa[ver]) {         fa[adj[ver][i]] = ver;         s[ver] += p[adj[ver][i]];         dfs(adj[ver][i]);       }     }   }   int main() {     int i, j, k;     scanf( %d , &n);     ini = 0;     for (i = 0; i < n; ++i) {       scanf( %lf , p + i);     }     memset(deg, -1, sizeof(deg));     for (i = 0; i < n - 1; ++i) {       int u, v;       scanf( %d%d , &u, &v);       ++deg[u];       ++deg[v];       adj[u].push_back(v);       adj[v].push_back(u);     }     dfs(0);     for (i = 0; i < n; ++i) {       ini -= p[i] * s[i];     }     scanf( %d , &q);     while (q--) {       int u;       double d;       scanf( %d%lf , &u, &d);       ini += (d - p[u]) * (double)deg[u];       if (fa[u] != -1) {         ini += p[fa[u]] * s[fa[u]];         s[fa[u]] += d - p[u];         ini -= p[fa[u]] * s[fa[u]];       }       ini += p[u] * s[u];       p[u] = d;       ini -= p[u] * s[u];       printf( %.5lf n , ini + 1.0);     }     return 0;   }   