hdu 3585(二分+最大团)
如果对团的知识不够了解的可以看看牛人的
http://www.cnblogs.com/pushing-my-way/archive/2012/08/08/2627993.html
题意:有n个点求最远距离的k个点的最短的那条边。
思路:我们可以求出任意两点的距离,然后二分距离,求K个点的最大团。
#include<iostream> #include<cmath> #include<algorithm> using namespace std; const int N=55; double map[N][N]; struct node {int x,y; }point[N]; int dp[N],stk[N][N]; int mx,n,K; double pp[N*N]; double dist(int x1,int y1,int x2,int y2) {return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)*1.0); } int dfs(int ns,int dep,int dis) {if(0==ns){if(dep>mx){mx=dep;}return 1;}int i,j,k,p,cnt;for(i=0;i<ns;i++){k=stk[dep][i];cnt=0;if(dep+n-k<=mx)return 0;if(dep+dp[k]<=mx)return 0;for(j=i+1;j<ns;j++){p=stk[dep][j];if(map[k][p]>=dis){stk[dep+1][cnt++]=p;}}dfs(cnt,dep+1,dis);}return 0; } int clique(double dis) {int i,j,ns;for(mx=0,i=n-1;i>=0;i--){for(ns=0,j=i+1;j<n;j++)if(map[i][j]>=dis)stk[1][ns++]=j;dfs(ns,1,dis);dp[i]=mx;}return mx; } int main() {int i,j;while(scanf("%d%d",&n,&K)!=EOF){int a=0;for(i=0;i<n;i++){scanf("%d%d",&point[i].x,&point[i].y);map[i][i]=0;for(j=0;j<i;j++){map[i][j]=map[j][i]=dist(point[i].x,point[i].y,point[j].x,point[j].y);pp[a++]=map[i][j];}}sort(pp,pp+a);int left=0;int right=a;double mi;while (right>left){int mid=(right+left)>>1;int t=clique(pp[mid]);if(t==K){mi=pp[mid];left++;//找到了符合条件的,但是要求是最大的,所以还要继续造符合要求的 }else if(t>K)left=mid;else right=mid;}printf("%.2lf\n",mi);}return 0; }
转载于:https://www.cnblogs.com/BruceNoOne/p/3269576.html
hdu 3585(二分+最大团)相关推荐
- HDU 2389(二分最大匹配优化算法,Hopcroft-Carp)
HDU 2389(二分最大匹配优化算法,Hopcroft-Carp) 题目链接: 大致题意; 您能帮助客人在下雨之前尽可能多地找到一把雨伞? 给定所有客人的位置和跑步速度,雨伞位置,到下雨开始时的时间 ...
- hdu3585 二分最大团(dp优化)
题意 给你一些点( <= 50),让你找到k个点,使得他们之间的最小距离最大. 思路: 求最小的最大,我们可以直接二分去枚举距离,但是要注意,不要去二分double找距离 ...
- hdu 5248(二分+贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5248 解题思路:这道题我原本的思路是动态规划,结果看到数很大,结果放弃了.然后想到二分,思路是对的,只 ...
- hdu 3622 二分+2-sat
/* 二分+2-sat 题意:在一个二维平面上给你n个炸弹,和2*n个位置,每一行的两个位置仅仅能有一个放炸弹 如今炸弹爆炸有一个半径.当炸弹爆炸时两个炸弹的半径化成的圆不能相交,求最大半径 二分半径 ...
- hdu 4033 二分几何
参考:http://blog.csdn.net/libin56842/article/details/26618129 题意:给一个正多边形内点到其他顶点的距离(逆时针给出),求正多边形的边长 二分多 ...
- hdu 4004 二分查找
直接二分查找答案即可,我的判断函数没有像大牛们那样优化,但是过是没问题的~ /* * hdu4004/linux.cpp * Created on: 2011-9-4 * Author : ben*/ ...
- hdu 5265(二分+枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5265 解题思路: 首先对每个数进行去模,这样得到的数就会是[0,p-1]的范围,接下来就是如何组合的问 ...
- hdu 3264(二分+圆相交面积)
题意:给出一些圆,选择其中一个圆的圆心为圆心,然后画一个大圆,要求大圆最少覆盖每个圆的一半面积.求最小面积. 解题思路:首先枚举每个圆,以其圆心作为大圆的圆心,然后再用二分去寻找最小的半径. #inc ...
- hdu 5093 二分匹配
/* 题意:给你一些冰岛.公共海域和浮冰,冰岛可以隔开两个公共海域,浮冰无影响 求选尽可能多的选一些公共海域点每行每列仅能选一个. 限制条件:冰山可以隔开这个限制条件.即*#*可以选两个 预处理: * ...
最新文章
- Ubuntu通过apt-get安装指定版本和查询指定软件有多少个版本
- python写学生系统-用python编写学生管理系统
- LeetCode:104_Maximum Depth of Binary Tree | 二叉树的最大深度 | Easy
- 【线上分享】WebRTC传输与服务质量
- Spark(十二) -- Spark On Yarn Spark as a Service Spark On Tachyon
- 我们为什么需要云原生?看完这一篇就够了
- 基于JAVA+Servlet+JSP+MYSQL的新闻发布系统
- 将ubuntu的home迁移至第二块磁盘
- 如何在ant脚本中获得svn版本号
- WINX新增(1): KMP字符串查找算法
- 邮箱显示exchange账号服务器错误,删除监视邮箱Exchange服务器不正常状态
- VMware安装苹果虚拟机-亲测有效
- bp神经网络优化算法对比,提高bp神经网络精度
- 代码获取DEP按钮及获取DEP控件
- 老王论坛蓝色大屏幕调节亮度
- 【学习笔记之计算机组成原理篇】计算机系统概论
- 一文搞清楚opengl、openglES、GLEW、的关系GLUT、FreeGLUT、GLFW
- C++ 类的静态成员及静态成员函数
- 实现父类一个动物的类, 包括成员变量名字年龄皮毛颜色,带参数构造函数,动物类有一个方法,move,打印动物是可以动的 1.《实现一个子类老鼠的类,继承动物类,老鼠类继承父类成员变量,老鼠还有个自己的属
- OC字符串分割,截取,转换,拼接