题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2458

题意:平面上有N个点,输出周长最小的三角形的周长。

思路:按照x升序。分治。然后就是合并。设两边分治得到的答案为C。那么对于在中间线两边的点到中线的x距离小于C。将这些点按照y升序。对于每个点,找到y坐标差也在C范围内的暴力一下就行。

struct point
{
    double x,y;
     
    void get()
    {
        RD(x,y);
    }
     
    double len()
    {
        return sqrt(x*x+y*y);
    }
     
    point operator-(point a)
    {
        point p;
        p.x=x-a.x;
        p.y=y-a.y;
        return p;
    }
};
 
point a[N];
int n;
 
double len(point p) {return p.len();}
 
int cmp1(point a,point b)
{
    return a.x<b.x;
}
 
int cmp2(point a,point b)
{
    return a.y<b.y;
}
 
double cal(int L,int R)
{
    double ans=dinf;
    int i,j,k;
    for(i=L;i<=R;i++) for(j=i+1;j<=R;j++)
    {
        for(k=j+1;k<=R;k++) 
        {
            upMin(ans,len(a[i]-a[j])+len(a[i]-a[k])+len(a[j]-a[k]));
        }
    }
    return ans;
}
 
point b[N],c[N],Q[N];
int bNum,cNum;
int qNum;

double combine(double x,int M,int L,int R)
{
    bNum=cNum=0;
    int now=M;
    while(a[M].x-a[--now].x<=x&&now>=L) b[++bNum]=a[now];
    now=M;
    while(a[++now].x-a[M].x<=x&&now<=R) c[++cNum]=a[now];
    c[++cNum]=a[M];
    sort(b+1,b+1+bNum,cmp2);
    sort(c+1,c+1+cNum,cmp2);
    double ans=dinf;
    int q=1,p=1;
    qNum=0;
    int i,j,k;
    FOR1(i,bNum)
    {
        while(q<=cNum&&b[i].y-c[q].y>x) q++;
        p=q;
        while(p<=cNum&&c[p].y-b[i].y<=x) Q[++qNum]=c[p++];
        for(j=1;j<=qNum;j++) for(k=1;k<=j-1;k++)
        {
            upMin(ans,len(b[i]-Q[j])+len(Q[j]-Q[k])+len(b[i]-Q[k]));
        }
        qNum=0;
    }
    q=1;p=1;cNum=0;
    now=M;
    while(a[++now].x-a[M].x<=x&&now<=R) c[++cNum]=a[now];
    b[++bNum]=a[M];
    sort(b+1,b+1+bNum,cmp2);
    sort(c+1,c+1+cNum,cmp2);
    FOR1(i,cNum)
    {
        while(q<=bNum&&c[i].y-b[q].y>x) q++;
        p=q;
        while(p<=bNum&&b[p].y-c[i].y<=x) Q[++qNum]=b[p++];
        for(j=1;j<=qNum;j++) for(k=1;k<=j-1;k++)
        {
            upMin(ans,len(c[i]-Q[j])+len(Q[j]-Q[k])+len(c[i]-Q[k]));
        }
        qNum=0;
    }
    return ans;
}
 
double DFS(int L,int R)
{
    double ans;;
    int M=(L+R)>>1;
    if(R-L+1>5)
    {
        ans=min(DFS(L,M+1),DFS(M+1,R));
        upMin(ans,combine(ans,M+1,L,R));
    }    
    else ans=cal(L,R);
    return ans;
}
 
int main()
{
    RD(n);
    int i;
    FOR1(i,n) a[i].get();
    sort(a+1,a+n+1,cmp1);
    double ans=DFS(1,n);
    PR(ans);
}

BZOJ 2458 最小三角形(分治)相关推荐

  1. 最小割分治(最小割树):BZOJ2229 BZOJ4519

    定理:n个点的无向图的最小割最多n-1个. 可能从某种形式上形成了一棵树,不是很清楚. 最小割分治:先任选两个点求一边最小割,然后将两边分别递归,就能找到所有的最小割. 这两个题是一样的,直接搬din ...

  2. bzoj2458: [BeiJing2011]最小三角形

    题目描述: $Xaviera$ 现在遇到了一个有趣的问题. 平面上有 $N$ 个点,$Xaviera$ 想找出周长最小的三角形. 由于点非常多,分布也非常乱,所以 $Xaviera$ 想请你来解决这个 ...

  3. [BZOJ2458][BeiJing2011]最小三角形

    题目描述 Description Xaviera现在遇到了一个有趣的问题.平面上有N个点,Xaviera想找出周长最小的三角形.由于点非常多,分布也非常乱,所以Xaviera想请你来解决这个问题.为了 ...

  4. bzoj 1934 最小割

    收获: 1.流量为0的边可以不加入. 2.最小割方案要与决策方案对应. 1 #include <cstdio> 2 #include <cmath> 3 #include &l ...

  5. BZOJ 1486 最小圈(二分+判负环)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1486 题意:给出一个有向图,边有权值.找到一个环,使得环上边的权值之和除以环上边的个数最 ...

  6. BZOJ 4285 使者 (CDQ分治+dfs序)

    题目传送门 题目大意:给你一棵树,有三种操作,在两个点之间连一个传送门,拆毁一个已有的传送门,询问两个点之间的合法路径数量.一条合法路径满足 1.经过且仅经过一个传送门 2.不经过起点终点简单路径上的 ...

  7. 图的绝对中心(bzoj 2180: 最小直径生成树)

    2180: 最小直径生成树 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 219  Solved: 105 [Submit][Status][Dis ...

  8. 最小树形图(bzoj 4349: 最小树形图 2260: 商店购物)

    最小树形图: 可以理解为对有向图求最小生成树,其中最小生成树的根为固定的某个点 朱-刘算法大致步骤: ①去掉所有重边 ②除了根之外对于每个点,只保留所有以它为终点的边中最短的一条,记bet[]为那条边 ...

  9. bzoj 4349: 最小树形图 朱-刘算法

    最裸的最小树形图(←现在才学的弱渣). 显然只需要打一下一个堡垒,然后剩下的可以最后用最小的代价再打. 然后只要把图建出来跑一下朱-刘算法即可. 简单讲一下朱-刘算法吧(思想还是很简单的),下面只考虑 ...

最新文章

  1. centos 7 局域网丢包排查_Nginx搭建局域网yum源问题补充及解决思路与方法转发收藏...
  2. 曾因「抢车位」出圈儿,神奇的Mask R-CNN了解一下?
  3. redmine plugin
  4. es-head 删除INDEX 创建mapping
  5. 基于React-Native0.55.4的语音识别项目全栈方案
  6. 笔记:制作游戏所需的数学
  7. 计算机桌面不来回变黑,电脑屏幕变小了左右黑几种解决方法
  8. nginx+php-fpm页面显示空白的解决方法
  9. 分享一个自己写的基于TP的关系模型(2)
  10. 梁勇:展望 2017年商业智能BI 发展的趋势
  11. Java自学和培训的区别
  12. 光敏传感器实验报告_光敏电阻传感器实验报告
  13. 语音合成1700多个中文音频
  14. MySQL权限篇之SHOW DATABASES及SHOW VIEW
  15. adb root 权限运行
  16. 如何有效设计你的调查问卷?
  17. 如何以聪明的方式提问
  18. go语言复数包_Go语言圣经 2.3-复数
  19. Vertica—操作汇总
  20. ArcGIS JS之 4.23之IIS本地部署与问题解决

热门文章

  1. xmm1是什么器件_数字电路实验指导书
  2. 从根儿上理解mysql_从根儿上理解 MySQL - 页总结
  3. python win32模块详解_python模块:win32com用法详解
  4. 在 Postman 中报错:Self-signed SSL certificates are being blocked 的分析与解决
  5. GO语言-基础语法:循环
  6. linux桥接模式下配置静态ip
  7. (组合数学)AtCoder Grand Contest 019 F - Yes or No
  8. Cow Contest POJ - 3660
  9. url参数中有+、空格、=、%、、#等特殊符号的问题解决
  10. js中的target与currentTarget的区别转