#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1005;
int n;
double mp[maxn][maxn];
struct node{
int x,y,p;
}e[maxn];
int vis[maxn],used[maxn][maxn];
int par[maxn];
double dis[maxn],dp[maxn][maxn];
double prim(){
memset(vis,0,sizeof(vis));
memset(used,0,sizeof(used));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
dis[i]=mp[1][i];
par[i]=1;
}
dis[0]=1e9;
vis[1]=1;
double sum=0;
for(int i=1;i<n;i++){
int k=0;
for(int j=1;j<=n;j++){
if(!vis[j]&&dis[j]<dis[k]){
k=j;
}
}
if(k==0){
break;
}
vis[k]=1;
used[par[k]][k]=used[k][par[k]]=1;
sum+=dis[k];
for(int j=1;j<=n;j++){
if(!vis[j]&&mp[k][j]<dis[j]){
dis[j]=mp[k][j];
par[j]=k;
}
if(vis[j]&&j!=k){
dp[k][j]=dp[j][k]=max(dp[j][par[k]],dis[k]);
}
}
}
return sum;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int T;
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>e[i].x>>e[i].y>>e[i].p;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
mp[i][j]=sqrt((e[i].x-e[j].x)*(e[i].x-e[j].x)+(e[i].y-e[j].y)*(e[i].y-e[j].y));
}
}
double mst=prim();
double ans=-1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j){
continue;
}
if(used[i][j]){
ans=max(ans,(e[i].p-e[j].p)/(mst-mp[i][j]));
}else{
ans=max(ans,(e[i].p-e[j].p)/(mst-dp[i][j]));
}
}
}
printf("%.2lf",ans);
}
}