萌新求调,互关
查看原帖
萌新求调,互关
867511
Jason0322楼主2024/8/8 11:04
#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);
	}
}
2024/8/8 11:04
加载中...