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>
int Last[200001], End[400000], Next[400000], Len[400000], w[200001], sz[200001],
    ct;
inline void Max(int& x, int y) { x = x > y ? x : y; }
inline void Link(int& x, int& y, int& z) {
  ct++;
  End[ct] = y;
  Len[ct] = z;
  Next[ct] = Last[x];
  Last[x] = ct;
}
bool vis[200001];
double sumdis = 1e9, f[400000];
int ansid;
inline void GetCen(int x, int F, int& cen, int& totsize) {
  sz[x] = 1;
  int mx = 0;
  for (register int i = Last[x]; i != 0; i = Next[i]) {
    int v = End[i];
    if (vis[v] == false && v != F) {
      GetCen(v, x, cen, totsize);
      sz[x] += sz[v];
      Max(mx, sz[v]);
    }
  }
  Max(mx, totsize - sz[x]);
  if (mx << 1 <= totsize) {
    cen = x;
  }
}
inline void AddDis(int x, int F, double& sumdis, double& ddis, long long Dis,
                   int e) {
  double tem = sqrt(Dis) * w[x];
  sumdis += tem;
  f[e] += tem;
  ddis += tem * Dis;
  for (register int i = Last[x]; i != 0; i = Next[i]) {
    if (End[i] != F) {
      AddDis(End[i], x, sumdis, ddis, Dis + Len[i], e);
    }
  }
}
inline void GetAns(int x, int totsize) {
  int cen;
  GetCen(x, 0, cen, totsize);
  vis[cen] = true;
  double tot = 0, dtot = 0;
  for (register int i = Last[cen]; i != 0; i = Next[i]) {
    int v = End[i];
    double maxdis = 0, ddis = 0;
    AddDis(v, cen, maxdis, ddis, Len[i], i);
    tot += maxdis;
    dtot += ddis;
  }
  if (dtot < sumdis) {
    sumdis = dtot;
    ansid = cen;
  }
  for (register int i = Last[cen]; i != 0; i = Next[i]) {
    if (vis[End[i]] == false && tot - f[i] * 2 < 1e-9) {
      return GetAns(End[i],
                    sz[End[i]] < sz[cen] ? sz[End[i]] : totsize - sz[cen]);
    }
  }
}
int main() {
  int n, x, y, z;
  scanf("%d", &n);
  for (register int i = 1; i <= n; i++) {
    scanf("%d", w + i);
  }
  for (register int i = 1; i != n; i++) {
    scanf("%d%d%d", &x, &y, &z);
    Link(x, y, z);
    Link(y, x, z);
  }
  GetAns(1, n);
  printf("%d ", ansid);
  printf("%.8lf", sumdis);
  return 0;
}
