标签:acm
点击打开链接题目链接

2 4 1 1 20 1 2 30 200 2 80 200 1 100 3 1 1 20 1 2 30 2 2 40
65.00 70.00
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define INF 0x3f3f3f3f*1.0
using namespace std;
double getdistence(int x1,int y1,int x2,int y2){
double xx=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return xx;
}
int n;
double kill;
struct Node{
int x,y,p;
}node[1111];
bool visit[1111][1111],vis[1111];
double dis[1111][1111],path[1111][1111];
int pre[1111];
void init(){
memset(visit,0,sizeof(visit));
memset(vis,0,sizeof(vis));
memset(path,0,sizeof(path));
kill=0.0;
for(int i=1;i<=n;i++)
scanf("%d %d %d",&node[i].x,&node[i].y,&node[i].p);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j]=getdistence(node[i].x,node[i].y,node[j].x,node[j].y);
}
void prim(){
double dist[1111];
vis[1]=1;
for(int i=1;i<=n;i++){
dist[i]=dis[1][i];
pre[i]=1;
}
int p,k;
p=-1;
double minn;
for(int i=1;i<n;i++){
minn=INF;
for(int j=1;j<=n;j++){
if(!vis[j]&&minn>dist[j]){
minn=dist[j];
k=j;
}
}
visit[k][pre[k]]=visit[pre[k]][k]=1;
kill+=minn;
vis[k]=1;
for(int j=1;j<=n;j++){
if(!vis[j]&&dist[j]>dis[k][j]){
dist[j]=dis[k][j];
pre[j]=k;
}
if(vis[j]&&j!=k){
path[j][k]=path[k][j]=max(path[j][pre[k]],dist[k]);
}
}
}
}
void solve(){
double ans=0.0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(j!=i){
if(visit[i][j])
ans=max(ans,(node[i].p+node[j].p)*1.0/(kill-dis[i][j]));
else
ans=max(ans,(node[i].p+node[j].p)*1.0/(kill-path[i][j]));
}
}
}
printf("%.2f\n",ans);
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
init();
prim();
solve();
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU 4081 Qin Shi Huang's National Road System 最小生成树
标签:acm
原文地址:http://blog.csdn.net/qq_16843991/article/details/47083505