/*关于最小生成树的等效边,就是讲两个相同的集合连接在一起
先建立一个任意最小生成树,这条边分开的两个子树的节点最大的一个和为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. POJ3090 巧用欧拉函数 phi(x)

    POJ3090 给定一个坐标系范围 求不同的整数方向个数 分析: 除了三个特殊方向(y轴方向 x轴方向 (1,1)方向)其他方向的最小向量表示(x,y)必然互质 所以对欧拉函数前N项求和 乘2(关于( ...

  2. Tool:安全狗

    ylbtech-Tool:安全狗 安全狗,互联网安全品牌,云安全服务与解决方案提供商 .企业用户遍布互联网金融.电商.游戏.移动互联网.政府单位等多个行业. 1.返回顶部 1.   2. 2.返回顶部 ...

  3. 看看 SDWebImage内部基本实现过程

    一.实现流程 入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 ...

  4. 腾讯云SSL证书管理

    2018050608010400y5mbx15awnpwxfhdmd7zqet1i9dzaqkvb6lxzosi4qq5ezbr

  5. [Swift通天遁地]六、智能布局-(1)给视图添加尺寸和中心点的约束

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. 微信小程序连接Java后台

    有人问我小程序怎么连后台,这里直接贴代码 在app.js里 // api request request(url, params) { return new Promise((resolve, rej ...

  7. 绑定树tree 的后台方法

    #region 获取部门列表树集合         /// <summary>         /// 获取部门列表树集合         /// </summary>     ...

  8. 【BZOJ1939】[Croatian2010] Zuma(动态规划)

    题目: BZOJ1939(权限题) 分析: 这题很容易看出是DP,但是状态和转移都不是很好想-- 用\(dp[l][r][c]\)表示在\(l\)前面已经新加了\(c\)个和\(l\)一样的弹子时,使 ...

  9. myeclipse配置tomcat后,无法正常使用的问题

    如图所示:一定要设置为Enable.否则部署tomcat时,没有tomcat8.0

  10. Linux命令(005) -- kill、pkill和killall的比较

    kill命令用来“杀掉”指定进程PID的进程.终止一个前台进程可以使用Ctrl+C,终止一个后台进程就须用kill命令.kill命令是通过向进程发送指定的信号来结束相应进程的.在默认情况下,kill命 ...