#include <bits/stdc++.h>
using namespace std;
const int MAXN = 202020;
const double INF = 1E30;
int N;
int w[MAXN];
vector<pair<int, int> > edge[MAXN];
bool vis[MAXN];
double ans[MAXN];
double s3[MAXN], s1[MAXN];
int wei[MAXN];
void dfsw(int v, int p) {
  if (vis[v]) return;
  wei[v] = 1;
  for (auto ch : edge[v]) {
    if (vis[ch.first]) continue;
    if (ch.first == p) continue;
    dfsw(ch.first, v);
    wei[v] += wei[ch.first];
  }
}
void dfs(int v, int p, int d) {
  double sqd = sqrt(d);
  s3[v] = w[v] * sqd * d;
  s1[v] = w[v] * sqd;
  for (auto ch : edge[v]) {
    if (ch.first == p) continue;
    dfs(ch.first, v, d + ch.second);
    s3[v] += s3[ch.first];
    s1[v] += s1[ch.first];
  }
}
void dfs2(int v, int p, vector<int> &vec) {
  if (vis[v]) return;
  vec.push_back(v);
  for (auto ch : edge[v]) {
    if (ch.first == p) continue;
    dfs2(ch.first, v, vec);
  }
}
void calc() {
  for (int i = 0; i < N; i++) ans[i] = INF;
  vector<int> vec;
  for (int i = 0; i < N; i++) vec.push_back(i);
  while (!vec.empty()) {
    for (auto x : vec) vis[x] = false;
    dfsw(vec[0], -1);
    int vs = vec.size();
    int vs2 = vec.size() / 2 + 1;
    int v = -1;
    for (auto x : vec) {
      bool ok = true;
      if (vs - wei[x] > vs2) ok = false;
      for (auto ch : edge[x]) {
        if (vis[ch.first] || wei[ch.first] > wei[x]) continue;
        if (wei[ch.first] > vs2) ok = false;
      }
      if (ok) v = x;
    }
    dfs(v, -1, 0);
    ans[v] = s3[v];
    int bestch = -1;
    double bestgrad = -INF;
    for (auto ch : edge[v]) {
      if (vis[ch.first]) continue;
      double grad = s1[ch.first];
      if (grad > bestgrad) {
        bestgrad = grad;
        bestch = ch.first;
      }
    }
    if (bestch == -1) break;
    vis[v] = true;
    vector<int> nvec;
    dfs2(bestch, v, nvec);
    for (auto x : vec) vis[x] = true;
    vec = nvec;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> N;
  for (int i = 0; i < N; i++) cin >> w[i];
  for (int i = 0; i < N - 1; i++) {
    int a, b, l;
    cin >> a >> b >> l;
    a--;
    b--;
    edge[a].push_back(make_pair(b, l));
    edge[b].push_back(make_pair(a, l));
  }
  calc();
  int bst = -1;
  double bstval = 1E20;
  for (int i = 0; i < N; i++) {
    if (ans[i] < bstval) {
      bstval = ans[i];
      bst = i;
    }
  }
  cout << bst + 1 << " " << fixed << setprecision(10) << bstval << endl;
  return 0;
}
