/*关于最小生成树的等效边,就是讲两个相同的集合连接在一起
先建立一个任意最小生成树,这条边分开的两个子树的节点最大的一个和为A,sum为最小生成树的权值和,B为sum-当前边的权值
不断枚举最小生成树中的边找最优值即可。
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#define N 1100
struct nodee
{
int u,v;
double w;
} edge[N*N];
struct node
{
int u,v,next;
double w;
} bian[N*N];
int index,yong,head[N],visit[N],n,pre[N],flag[N],c[N],aa[N],bb[N];
double ans;
double sum;
void init()
{
index=0;
yong=0;
sum=0;
int i;
for(i=1; i<=n; i++)
pre[i]=i;
memset(head,-1,sizeof(head));
memset(flag,0,sizeof(flag));
}
int cmp(const void *a,const void *b)
{
return (*(struct nodee *)a).w>(*(struct nodee *)b).w?1:-1;
}
double distance(int u,int v)
{
return sqrt(1.0*(aa[u]-aa[v])*(aa[u]-aa[v])+(bb[u]-bb[v])*(bb[u]-bb[v])*1.0);
}
int find(int x)
{
if(pre[x]!=x)
pre[x]=find(pre[x]);
return pre[x];
}
void addedge(int u,int v,double w)
{
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
void creat()
{
int k=0,i;
for(i=0; i<index&&k<n-1; i++)
{
int u=find(edge[i].u);
int v=find(edge[i].v);
if(u!=v)
{
k++;
flag[k]=i;
sum=sum+edge[i].w;
addedge(edge[i].u,edge[i].v,edge[i].w);
addedge(edge[i].v,edge[i].u,edge[i].w);
pre[u]=v;
}
}
return ;
}
void dfs(int u)//定义全局变量好点
{
int i;
visit[u]=1;
for(i=head[u]; i!=-1; i=bian[i].next)
{
int v=bian[i].v;
if(!visit[v])
{
dfs(v);
}
}
if(ans<c[u])
ans=c[u];
}
int main()
{
int t,i,j;
double m;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
init();
for(i=1; i<=n; i++)
scanf("%d%d%d",&aa[i],&bb[i],&c[i]);
for(i=1; i<n; i++)
for(j=i+1; j<=n; j++)
{
edge[index].u=i;
edge[index].v=j;
edge[index++].w=distance(i,j);
}
qsort(edge,index,sizeof(edge[0]),cmp);
creat();
m=-1;
for(i=1; i<n; i++)
{
int e=flag[i];
memset(visit,0,sizeof(visit));
visit[edge[e].u]=1;
ans=0;
dfs(edge[e].v);
max1=ans;
memset(visit,0,sizeof(visit));
visit[edge[e].v]=1;
ans=0;
dfs(edge[e].u);
max2=ans;
if(m<1.0*(max1+max2)/(sum-edge[e].w))
m=1.0*(max1+max2)/(sum-edge[e].w);
}
printf("%.2f\n",m);
}
return 0;
}

hdu 4081 最小生成树变形的更多相关文章

  1. Hdu 4081 最小生成树

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  2. hdu 4081 最小生成树+树形dp

    思路:直接先求一下最小生成树,然后用树形dp来求最优值.也就是两遍dfs. #include<iostream> #include<algorithm> #include< ...

  3. HDU 4786 最小生成树变形 kruscal(13成都区域赛F)

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. Qin Shi Huang's National Road System HDU - 4081(树形dp+最小生成树)

    Qin Shi Huang's National Road System HDU - 4081 感觉这道题和hdu4756很像... 求最小生成树里面删去一边E1 再加一边E2 求该边两顶点权值和除以 ...

  5. HDU 1233(最小生成树)

    HDU 1233(最小生成树 模板) #include <iostream> #include <algorithm> #include <cstdio> usin ...

  6. HDU 4081 Qin Shi Huang's National Road System 最小生成树+倍增求LCA

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4081 Qin Shi Huang's National Road System Time Limit: ...

  7. hdu 4081 Qin Shi Huang's National Road System(最小生成树+dp)2011 Asia Beijing Regional Contest

    同样是看别人题解才明白的 题目大意—— 话说秦始皇统一六国之后,打算修路.他要用n-1条路,将n个城市连接起来,并且使这n-1条路的距离之和最短.最小生成树是不是?不对,还有呢.接着,一个自称徐福的游 ...

  8. HDU 4081 Qin Shi Huang's National Road System 最小生成树

    分析:http://www.cnblogs.com/wally/archive/2013/02/04/2892194.html 这个题就是多一个限制,就是求包含每条边的最小生成树,这个求出原始最小生成 ...

  9. hdu 4081 Qin Shi Huang's National Road System (次小生成树的变形)

    题目:Qin Shi Huang's National Road System Qin Shi Huang's National Road System Time Limit: 2000/1000 M ...

随机推荐

  1. P2657 [SCOI2009]windy数 数位dp

    数位dp之前完全没接触过,所以NOIP之前搞一下.数位dp就是一种dp,emm……用来求解区间[L,R]内满足某个性质的数的个数,且这个性质与数的大小无关. 在这道题中,dp[i][j]代表考虑了i位 ...

  2. bzoj1106

    模拟+树状数组 先开始以为是先删距离最小的,这样可以减小上下的距离,然后觉得很难写,看码长很短,就看了题解,结果很奥妙 我们只考虑两种元素,就是如果像-a-b-a-b-这样的肯定得交换,如果像-a-b ...

  3. 软RAID管理

    软RAID管理 软RAID 软RAID 提供管理界面:mdadm 软RAID为空余磁盘添加冗余,结合了内核中的md(multi devices). RAID 设备可命名为/dev/md0./dev/m ...

  4. Ansi2Utf8 小工具

    将GB2312编码的文件转成Unity使用的UTF8无bom格式 主要用批处理执行 Ansi2Utf8.exe XXXXX.txt  源代码 using System; using System.Co ...

  5. P3299 [SDOI2013]保护出题人

    传送门 全世界都会二分可海星-- 首先记\(sum[i]\)为\(a[i]\)的前缀和,那么第\(i\)个的答案就是\(max\{\frac{sum[i]-sum[j-1]}{x+(i-j)d}\}\ ...

  6. vue-video-player视频播放插件

    安装依赖 npm install vue-video-player -S 引入配置 //main.js import 'video.js/dist/video-js.css' import 'vue- ...

  7. Codeforces 803G Periodic RMQ Problem ST表+动态开节点线段树

    思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用  lazy=0 没被覆盖过 els ...

  8. 【洛谷4219】[BJOI2014]大融合(线段树分治)

    题目: 洛谷4219 分析: 很明显,查询的是删掉某条边后两端点所在连通块大小的乘积. 有加边和删边,想到LCT.但是我不会用LCT查连通块大小啊.果断弃了 有加边和删边,还跟连通性有关,于是开始yy ...

  9. CSS怎样改变行内样式(通过外部级联样式表) css !important用法CSS样式使用优先级判断

    CSS样式优先级 行内>内部>外部 使用!important的css定义是拥有最高的优先级的.只是在ie6下出了一点小的bug,注意书写方式一般可以轻松避开的. CSS中的!importa ...

  10. [转]通过Net Manager 配置Oracle 11g本地监听服务(listener service)

    本文转自:http://blog.csdn.net/mozart_cai/article/details/8596504 [Target] 通过ip address 监听orcl服务,而不是通过loc ...