先求一遍最小生成树,然后遍历所有边,如果这条边在最小生成树中就直接减去这条边的距离,如果不在最小生成树中,那么就构成了一个环,此时需要减去最小生成树中最大的边,即求次小生成树时的maxx,

有一点要注意当求maxx最大值时j!=k,虽然不知道原理是什么。。。。如果有大佬知道求告知

好像求次小生成树时没有这个条件,据说还能prim+dfs做。。。。

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=,inf=0x3f3f3f; struct edge{
double x,y,p;
}e[N];
double c[N][N],d[N];
double maxx[N][N];
int pre[N],n;
bool vis[N],used[N][N];
double dis(edge a,edge b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double prim()
{
memset(vis,,sizeof vis);
memset(used,,sizeof used);
memset(maxx,,sizeof maxx);
for(int i=;i<=n;i++)
{
pre[i]=;
d[i]=c[][i];
}
vis[]=;
pre[]=;
d[]=;
double ans=;
for(int i=;i<n;i++)
{
double mind=inf;
int k;
for(int j=;j<=n;j++)
{
if(!vis[j]&&mind>d[j])
{
mind=d[j];
k=j;
}
}
vis[k]=;
ans+=mind;
used[k][pre[k]]=used[pre[k]][k]=;
for(int j=;j<=n;j++)
{
if(vis[j]&&k!=j)maxx[j][k]=maxx[k][j]=max(maxx[j][pre[k]],d[k]);
if(!vis[j]&&d[j]>c[k][j])
{
d[j]=c[k][j];
pre[j]=k;
}
}
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
cout<<setiosflags(ios::fixed)<<setprecision();
int t;
cin>>t;
while(t--){
cin>>n;
for(int i=;i<=n;i++)
cin>>e[i].x>>e[i].y>>e[i].p;
for(int i=;i<=n;i++)
{
c[i][i]=;
for(int j=i+;j<=n;j++)
{
c[i][j]=c[j][i]=dis(e[i],e[j]);
}
}
double B=prim(),ans=-;
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
if(used[i][j])ans=max(ans,(e[i].p+e[j].p)/(B-c[i][j]));
else ans=max(ans,(e[i].p+e[j].p)/(B-maxx[i][j]));
}
}
cout<<ans<<endl;
}
return ;
}

最新文章

  1. CSS Reset
  2. How to build the Robotics Library from source code on Windows
  3. javascript 时间操作
  4. PAT 解题报告 1048. Find Coins (25)
  5. which和whereis 命令
  6. UVA116 单向 DSP(多段图最短路)
  7. HP P2055d激光打印机PCL XL error的解决
  8. gzcompress, gzencode, gzdeflate三个压缩函数的对比
  9. 如何在Google Map中处理大量标记(ASP.NET)(转)
  10. HDU 5366 The mook jong
  11. 翻译:JVM虚拟机规范1.7中的运行时常量池部分(二)
  12. ReenTrantLock可重入锁(和synchronized的区别)总结
  13. Java课堂测试——一维数组
  14. 编译pcre 报错 error: Invalid C++ compiler or C++ compiler flags
  15. 谈谈 JAVA 的对象序列化
  16. vue 项目 使用sass
  17. expdp impdp 参数
  18. 20155308《网络对抗》Exp8 Web基础
  19. 《Qt数据类型》--QByteArray,QString,int,hex之间的转化
  20. 【转】【Android】Android Studio打包全攻略

热门文章

  1. ZenCart分类数量打折Category Quantity Discount插件
  2. windows安装oracle client 18c 和plsql工具
  3. git 常用命令行操作
  4. linux meta 18.0.1 系统安装nodejs
  5. javascript 理解对象--- 属性类型
  6. 验证url格式
  7. jQuery :gt 选择器 jQuery :lt 选择器
  8. idea+maven本地仓库更新问题
  9. 20145321 《Java程序设计》第3周学习总结
  10. # 20145327 《Java程序设计》第七周学习总结