zoukankan      html  css  js  c++  java
  • 生成树收录

    题面https://www.luogu.com.cn/problem/P4047

    聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部落究竟是如何分布的。

    不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了 nn 个野人居住的地点(可以看作是平面上的坐标)。我们知道,同一个部落的野人总是生活在附近。我们把两个部落的距离,定义为部落中距离最近的那两个居住点的距离。聪聪还获得了一个有意义的信息——这些野人总共被分为了 kk 个部落!这真是个好消息。聪聪希望从这些信息里挖掘出所有部落的详细信息。他正在尝试这样一种算法:

    对于任意一种部落划分的方法,都能够求出两个部落之间的距离,聪聪希望求出一种部落划分的方法,使靠得最近的两个部落尽可能远离。


    看起来真复杂呀。

    不过仔细思考就发现无论如何最后都会剩下k个集合(然而开始我并没有发现┭┮﹏┭┮)

    也就是说,给一张图,n个点,要求取一些最大权边,使得剩下来的最大边最小

    接下来就是裸的生成树了。

    #include <bits/stdc++.h>
    using namespace std;
    int n,k,pre[1009],cnt;
    double x[1009],y[1009];
    double ji(int q,int w){
        return sqrt((x[q]-x[w])*(x[q]-x[w])+(y[q]-y[w])*(y[q]-y[w]));
    }
    struct p{
        int u,v;
        double s;
        bool operator < (const p&tmp)    const{
            return s<tmp.s;//大到小 
        }
    }a[1000009];
    int find(int x)    {
        return x==pre[x]? pre[x]:pre[x]=find(pre[x]);
    }
    void join(int q,int w){
        pre[find(q)]=find(w);
    }
    double kur(){
        for(int i=1;i<=n;i++)    pre[i]=i;
        double minn=1e18;
        int j=0;
        for(int i=1;i<=n-k;i++)
        {
            for(;j<cnt;j++)
            {
                if(find(a[j].u)!=find(a[j].v))
                {
                    join(a[j].u,a[j].v);
                    break;
                }
            }
        }
        for(;j<cnt;j++)
        {
            if(find(a[j].u)!=find(a[j].v))
                return a[j].s;
        }
    }
    int main()
    {
        cin>>n>>k;
        for(int i=1;i<=n;i++)    cin>>x[i]>>y[i];
        for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
        a[cnt].u=i,a[cnt].v=j,a[cnt++].s=ji(i,j);
        sort(a,a+cnt);
        printf("%.2lf",kur());
    }
    View Code
  • 相关阅读:
    centos 安装 TortoiseSVN svn 客户端
    linux 定时任务 日志记录
    centos6.5 安装PHP7.0支持nginx
    linux root 用户 定时任务添加
    composer 一些使用说明
    laravel cookie写入
    laravel composer 安装指定版本以及基本的配置
    mysql 删除重复记录语句
    linux php redis 扩展安装
    linux php 安装 memcache 扩展
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12470085.html
Copyright © 2011-2022 走看看