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
  • 相关阅读:
    Python----定义
    [转载]Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    彻底明白IP地址——计算相关地址
    [转载] 教你如何迅速秒杀掉:99%的海量数据处理面试题
    [转载]从B 树、B+ 树、B* 树谈到R 树
    [转载]Java抽象类和接口的学习
    [转载]字符串匹配的Boyer-Moore算法
    [转载]字符串匹配的KMP算法
    [转载]孤儿进程与僵尸进程[总结]
    [转载]Huffman编码压缩算法
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12470085.html
Copyright © 2011-2022 走看看