#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
const int M = 1005;
double ans;
struct node {
int x, y;
int value;
}line[M];
struct Node{
int x, y;
double dist;
}road[M*M];
struct edge{
int v;
double dis;
};
vector<edge>que[M];
int vist[M];
int maxpiont;
edge cur;
double sum;
int p[M];
int root;
int cnt;
int n;
double getdist(int i, int j){
return sqrt((double)(line[i].x - line[j].x)*(line[i].x - line[j].x) + (line[i].y - line[j].y)*(line[i].y - line[j].y));
}
bool cmp(Node p1, Node p2){
return p1.dist < p2.dist;
}
void work(){
for(int i = 0; i < n; i++){
for(int j = i + 1; j < n; j++){
road[cnt].x = i;
road[cnt].y = j;
road[cnt++].dist = getdist(i, j);
}
}
}
void init(){
cnt = 0;
ans = 0;
sum = 0;
maxpiont = 0;
for(int i = 0; i <= n; i++){
que[i].clear();
p[i] = i;
}
}
int Find(int x){
return x == p[x] ? x: p[x] = Find(p[x]);
}
int dfs(int u){
int v, temp;
int maxn = line[u].value;
vist[u] = 1;
for(int i = 0; i < (int)que[u].size(); i++){
v = que[u][i].v;
if(!vist[v]){
temp = dfs(v);
maxn = max(maxn, temp);
ans = max(ans, (maxpiont + temp)/(sum - que[u][i].dis));
}
}
return maxn;
}
int main()
{
int T;
int a, b;
//freopen("aa.txt","r",stdin);
// freopen("bb.txt","w",stdout);
freopen("aa.txt", "r", stdin);
//freopen("bb.txt","w",stdout);
scanf("%d", &T);
while(T--){
scanf("%d", &n);
init();
memset(vist, 0, sizeof(vist));
for(int i = 0; i < n; i++){
scanf("%d%d%d", &line[i].x, &line[i].y, &line[i].value);
if(maxpiont < line[i].value){
maxpiont = line[i].value;
root = i;
}
}
work();
sort(road, road + cnt, cmp);
for(int i = 0; i < cnt; i++){
a = Find(road[i].x);
b = Find(road[i].y);
if(a != b){
p[a] = b;
cur.v = b;
cur.dis = road[i].dist;
sum += road[i].dist;
que[a].push_back(cur);
cur.v = a;
que[b].push_back(cur);
}
}
dfs(root);
printf("%.2lf\n", ans);
}
return 0;
}
hdu4081 Qin Shi Huang's National Road System(文件读入)
最新推荐文章于 2019-07-03 07:21:02 发布