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>
#define re register
using namespace std;
inline int read(){
	re int t=0;re char v=getchar();
	while(v<'0')v=getchar();
	while(v>='0')t=(t<<3)+(t<<1)+v-48,v=getchar();
	return t;
}
int n,m,pos,head[100002],cnt,rt,siz[100002],mn,a[100002];
double f[100002],s1,s2,ans;
bool v[100002];
struct edge{int to,next,w;}e[200002];
inline void add(re int x,re int y,re int z){e[++cnt]=(edge){y,head[x],z},head[x]=cnt;}
inline void find(re int x,re int y){
	siz[x]=1;
	re int mx=0;
	for(re int i=head[x];i;i=e[i].next)if(e[i].to^y)find(e[i].to,x),siz[x]+=siz[e[i].to],mx=max(mx,siz[e[i].to]);
	mx=max(mx,n-siz[x]);
	if(mx<mn)mn=mx,pos=x;
}
inline void dfs(re int x,re int y,re int z,re int d){
	s1+=sqrt(d)*d*a[x],f[z]+=sqrt(d)*a[x];
	for(re int i=head[x];i;i=e[i].next)if(e[i].to^y)dfs(e[i].to,x,z,d+e[i].w);
}
inline void dfs(re int x){
	mn=1e9,find(x,x),x=pos,s1=s2=0;
	for(re int i=head[x];i;i=e[i].next)f[e[i].to]=0,dfs(e[i].to,x,x,e[i].w),f[e[i].to]*=1.5,s2+=f[e[i].to];
	v[x]=1;
	if(s1<ans)ans=s1,rt=x;
	for(re int i=head[x];i;i=e[i].next)if(!v[e[i].to])if(s2<2*f[e[i].to])return dfs(e[i].to);
}
int main(){
	n=read(),ans=1e100;
	for(re int i=1;i<=n;++i)a[i]=read();
	for(re int i=1,x,y,z;i<n;++i)x=read(),y=read(),z=read(),add(x,y,z),add(y,x,z);
	dfs(1);
	printf("%d %.10lf",rt,ans);
}
