3
1 1 5
1 3 42
1 2 42
 2
42 23
1 2 10
 10
45792697 27183921 4791060 77070594 27286110 66957065 19283638 2944837 26775511 65379701
5 8 25
8 10 94
1 4 14
9 7 96
4 2 16
2 6 58
2 3 99
6 8 21
8 9 87
 5
3 1 2 6 5
1 2 3
2 3 1
4 3 9
5 3 1
 10
26 31 21 57 56 44 54 58 79 97
2 1 277
1 8 91
1 7 380
4 1 649
10 5 799
10 1 940
8 6 627
6 3 177
9 6 685
 10
8 100 62 38 26 51 26 23 77 32
6 8 29
4 1 82
7 8 66
7 10 67
8 9 98
6 1 14
1 5 48
3 1 58
2 9 90
 2
23 42
1 2 10
 1
42
 3
1 5 1
1 3 42
1 2 42
 10
1 1 1 1 1 1 1 1 1 1
1 2 5
1 3 5
1 4 5
1 5 5
1 6 5
1 7 5
1 8 5
1 9 5
1 10 5
 3
1 1 1
1 2 42
2 3 42
 3
5 1 1
1 3 42
1 2 24

3 1042.0638260857 1 727.3238618387 6 283959805416.40496826
 3 192.0000000000 1 13952642.4776933547 8 544327.1927847408 2 727.3238618387 1 0.0000000000 2 1042.0638260857 1 100.6230589875 2 544.3822186663 1 389.7666169867
#include <bits/stdc++.h>
using namespace std;
int sz[200005], l[200005], qd[200005 + 200005], qn[200005 + 200005],
    ql[200005 + 200005], block[200005 + 200005], w[200005];
int n, ret, ed, x, y;
double best, total;
double pard[200005];
void bd(int x, int y, int w) {
  qd[++ed] = y, qn[ed] = l[x], l[x] = ed, ql[ed] = w;
}
void dfs1(int x, int y) {
  sz[x] = 1;
  for (int i = (l[x]); i; i = qn[i])
    if (qd[i] != y && !block[i]) {
      dfs1(qd[i], x);
      sz[x] += sz[qd[i]];
    }
}
void dfs2(int x, int y, int d) {
  total += w[x] * sqrt(d * 1.) * (d * 1.);
  for (int i = (l[x]); i; i = qn[i])
    if (qd[i] != y) dfs2(qd[i], x, d + ql[i]);
}
void Try(int r) {
  total = 0;
  dfs2(r, -1, 0);
  if (total < best) best = total, ret = r;
}
double dfs3(int x, int y, int d) {
  double S = w[x] * sqrt(d * 1.);
  for (int i = (l[x]); i; i = qn[i])
    if (qd[i] != y) S += dfs3(qd[i], x, d + ql[i]);
  return S;
}
void solve(int x) {
  dfs1(x, -1);
  int ttl = sz[x];
  if (ttl == 1) {
    Try(x);
    return;
  }
  int rt = x, p = -1;
  while (1) {
    int mx = 0, t;
    for (int i = (l[rt]); i; i = qn[i])
      if (qd[i] != p && !block[i]) {
        if (sz[qd[i]] >= mx) mx = sz[qd[i]], t = qd[i];
      }
    if (mx <= ttl / 2) break;
    p = rt;
    rt = t;
  }
  int grad;
  double sum = 0, mx = -1e30;
  Try(rt);
  for (int i = (l[rt]); i; i = qn[i]) {
    pard[qd[i]] = dfs3(qd[i], rt, ql[i]);
    sum += pard[qd[i]];
  }
  for (int i = (l[rt]); i; i = qn[i]) {
    int y = qd[i];
    block[i] = block[i ^ 1] = 1;
    double t = pard[y] * 2. - sum;
    if (t > mx) mx = t, grad = y;
  }
  solve(grad);
}
int main() {
  scanf("%d", &n);
  for (int i = (0); i < (n); i++) scanf("%d", &w[i]);
  ed = 1;
  for (int i = (0); i < (n - 1); i++) {
    int w;
    scanf("%d%d%d", &x, &y, &w);
    x--, y--;
    bd(x, y, w), bd(y, x, w);
  }
  best = 1e30;
  solve(0);
  printf("%d %.9f\n", ret + 1, best);
  return 0;
}
