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;
const int MAXN = 2e5 + 10;
struct Edge {
  int to, w;
  Edge(int to, int w) : to(to), w(w) {}
};
vector<Edge> g[MAXN];
int sz[MAXN], cost[MAXN];
bitset<MAXN> used;
void getSize(int v, int p = -1) {
  sz[v] = 1;
  for (auto &e : g[v]) {
    int u = e.to;
    if (u != p && !used[u]) {
      getSize(u, v);
      sz[v] += sz[u];
    }
  }
}
int findCentroid(int v, int p, int n) {
  for (auto &e : g[v]) {
    int u = e.to;
    if (u != p && !used[u] && sz[u] > n / 2) {
      return findCentroid(u, v, n);
    }
  }
  return v;
}
double calcPepega(int v, int p, int d) {
  double pepega = 1. * cost[v] * sqrt(d);
  for (auto &e : g[v]) {
    int u = e.to;
    if (u != p) {
      pepega += calcPepega(u, v, d + e.w);
    }
  }
  return pepega;
}
double calcDist(int v, int p = -1, int d = 0) {
  double ans = 1. * cost[v] * sqrt(1LL * d * d * d);
  for (auto &e : g[v]) {
    if (e.to != p) {
      ans += calcDist(e.to, v, d + e.w);
    }
  }
  return ans;
}
int getAns(int v) {
  getSize(v);
  used[v] = true;
  double omegapepega = 0;
  int id = -1;
  for (int i = 0; i < g[v].size(); i++) {
    int u = g[v][i].to, w = g[v][i].w;
    if (!used[u]) {
      double d = calcPepega(u, v, w);
      if (d > omegapepega) {
        omegapepega = d;
        id = i;
      }
    }
  }
  if (id == -1) {
    return v;
  }
  int u = g[v][id].to;
  if (calcDist(v) <= calcDist(u)) {
    return v;
  }
  return getAns(findCentroid(u, v, sz[u]));
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  cout << fixed << setprecision(10);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> cost[i];
  }
  for (int i = 0; i < n - 1; i++) {
    int u, v, w;
    cin >> u >> v >> w;
    u--, v--;
    g[u].push_back(Edge(v, w));
    g[v].push_back(Edge(u, w));
  }
  getSize(0);
  int v = getAns(findCentroid(0, -1, n));
  cout << v + 1 << " " << calcDist(v);
}
