hdu 4081 最小生成树变形
/*关于最小生成树的等效边,就是讲两个相同的集合连接在一起
先建立一个任意最小生成树,这条边分开的两个子树的节点最大的一个和为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 最小生成树变形的更多相关文章
- Hdu 4081 最小生成树
Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
- hdu 4081 最小生成树+树形dp
思路:直接先求一下最小生成树,然后用树形dp来求最优值.也就是两遍dfs. #include<iostream> #include<algorithm> #include< ...
- HDU 4786 最小生成树变形 kruscal(13成都区域赛F)
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Qin Shi Huang's National Road System HDU - 4081(树形dp+最小生成树)
Qin Shi Huang's National Road System HDU - 4081 感觉这道题和hdu4756很像... 求最小生成树里面删去一边E1 再加一边E2 求该边两顶点权值和除以 ...
- HDU 1233(最小生成树)
HDU 1233(最小生成树 模板) #include <iostream> #include <algorithm> #include <cstdio> usin ...
- 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: ...
- hdu 4081 Qin Shi Huang's National Road System(最小生成树+dp)2011 Asia Beijing Regional Contest
同样是看别人题解才明白的 题目大意—— 话说秦始皇统一六国之后,打算修路.他要用n-1条路,将n个城市连接起来,并且使这n-1条路的距离之和最短.最小生成树是不是?不对,还有呢.接着,一个自称徐福的游 ...
- HDU 4081 Qin Shi Huang's National Road System 最小生成树
分析:http://www.cnblogs.com/wally/archive/2013/02/04/2892194.html 这个题就是多一个限制,就是求包含每条边的最小生成树,这个求出原始最小生成 ...
- 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 ...
随机推荐
- leetcode快排相关
leetcode:75颜色分类(3way).215数组中的第K个最大元素(normal) 3way private static void quick3waySort(int[] arr, int l ...
- PCB Winform中的WebBrowser扩展拖放(拖拽)功能 实现方法
我们在Winform支持网页通常增加WebBrowser控件实现,相当于内嵌浏览器浏览网页使用, 而此WebBrowser默认情况是文件拖入功能是不支持的, 如何才能支持呢.在这里介绍如何实现方法 一 ...
- 原生方式实现Ajax技术
一:什么是Ajax? Ajax:异步的JavaScript和XML,用于完成网页局部刷新功能(修改少量数据只用局部刷新,不用再整个网页重新加载): XML的作用:1.是用于数据传输,但现在都在使用JS ...
- 自动调整速率的Actor设计模式
问题背景 与数据库或者存储系统交互是所有应用软件都必不可少的功能之一,akka开发的系统也不例外.但akka特殊的地方在于,会尽可能的将所有的功能都设计成异步的,以避免Actor阻塞,然而无法避免IO ...
- 【转】vue.js三种安装方式
Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...
- NPOI复制模板导出Excel
本人菜鸟实习生一枚,公司给我安排了一个excel导出功能.要求如下:1.导出excel文件有样式要求:2.导出excel包含一个或多个工作表:3.功能做活(我的理解就是excel样式以后可能会变方便维 ...
- java基础之吃货联盟
因为用的是普通数组,所以编写的代码可能比较长,而且有的功能还比较不健全,代码如下: 0.定义数组(因为用static修饰可以不用New,比较方便,但可能比较损耗性能) //订餐人名字 static S ...
- Android Studio 关于build.gradle配置问题
当导入一个Android Project时,会出现很多版本的问题,导入前先删除 .idea文件 .gradle文件 ,gradle文件(与.gradle区分,导入时Android Studio会提示重 ...
- Codeforces_718A
A. Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input sta ...
- C# SetWindowsHookEx
[DllImport("user32.dll")] static extern IntPtr SetWindowsHookEx(int idHook, keyboardHookPr ...