首页 > 其他分享 >P4047 [JSOI2010] 部落划分

P4047 [JSOI2010] 部落划分

时间:2024-07-23 11:29:46浏览次数:13  
标签:JSOI2010 return 部落 int double fa P4047 1005 now

原题链接

题解

一步一步来,当 \(k=2\) 的时候,怎么分?

当 \(k=2\) 时,两个点集之间的距离等于两个点集中各取一个点之间的最小距离,我们联想到最小生成树的建立过程,按边权从小到大依次加入,如果两个点所属集合不同便合并

因此,当 \(k=2\) 的时候,答案是最小生成树的最后一个合并边(树边)

可以用反证法证明,如果答案更大,代表总是存在一个更小的边,使得边两端的集合不一

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

double x[1005],y[1005];

double cal(int i,int j)
{
    return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}

int fa[1005];

int finds(int now){return fa[now]==now?now:fa[now]=finds(fa[now]);}

struct node
{
    int a,b;
    double v;
    bool operator<(const node &c)const
    {
        return c.v>v;
    }
};

void solve()
{
    int s,p;
    cin>>p>>s;

    for(int i=1;i<=p;i++) cin>>x[i]>>y[i];

    vector<node> q;
    for(int i=1;i<=p;i++)
    {
        fa[i]=i;
        for(int j=i+1;j<=p;j++)
        {
            q.push_back({i,j,cal(i,j)});
        }
    }


    sort(q.begin(),q.end());
    int cnt=0;
    for(auto it:q)
    {
        auto [a,b,v]=it;
        int fx=finds(a),fy=finds(b);

        if(fx==fy) continue;

        cnt++;
        if(cnt==p-s+1)
        {
            printf("%.2lf\n",v);
            return;
        }
        fa[fx]=fy;
    }
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t=1;
    while(t--) solve();
    return 0;
}


标签:JSOI2010,return,部落,int,double,fa,P4047,1005,now
From: https://www.cnblogs.com/pure4knowledge/p/18317937

相关文章

  • 并查集——朋友圈,部落问题
    7-2朋友圈分数25全屏浏览切换布局作者 DS课程组单位 浙江大学某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论......
  • 部落冲突搬砖项目全套教程,轻松上手,赚钱无忧
    ......
  • P4171 [JSOI2010] 满汉全席 2-SAT
    P4171[JSOI2010]满汉全席2-SAT题目链接思路:2-SAT模板题,我们将满席定为1,汉席定为0.那么建边即可。判断同一道菜满汉是否在强联通分量中即可。注意多测清空!!!代码:vector<int>e[N];stack<int>stk;intdfn[N],low[N],tot;intinstk[N],scc[N],siz[N],cnt;intn,m;void......
  • 地精部落
    分析本来以为是纯组合数的题,但我找不到规律,然后就发现全网都是dp的解法我们可以设dp[i][j]表示i个数组成的开头为j且j为波峰的排列种数然后我们经过思考之后就不难发现组成的序列会有以下的几条性质一条序列具有对称性,将其前后调换位置后任满足题意如果序列中......
  • P2143 [JSOI2010] 巨额奖金 题解
    P2143[JSOI2010]巨额奖金题解矩阵树定理+Kruskal最小生成树计数。思路MST都是喵喵题。引理1:所有合法的权值相同边的连边方案,得到的连通块情况是相同的。感性理解:如果不相同意味着至少有一条边可以连通一对连通块。所以我们可以这么做:先跑Kruskal标记树边,然后枚举......
  • L2-024 部落
    注意merge的时候如果p1和p2相等及时返回否则死循环了,代码有问题而不是算法超时。#define_CRT_SECURE_NO_WARNINGS#include<bits/stdc++.h>usingnamespacestd;#definelllonglongintparent[10010],deep[10010];intgetf(intx){ inty=x; while(parent[y]!=-......
  • IT部落格网页设计图
    ......
  • [刷题笔记] [JSOI2010] 连通数
    DescriptionProblem由于题目太短我直接上图罢Analysis题目描述非常简单,但是直接爆搜肯定会TLE,毕竟\(n\leq2000\)并且timelimit=300ms。我们发现如果题目保证无环直接topsort即可,问题就在环上,如何处理环呢?我们可以缩点,缩点笔记,显然我们只需要统计答案数,缩完点后就变成了......
  • 程序员部落酋长 Joel 之洞见
    软件开发随想集——“很久以前,在一个很遥远、很遥远的星系中,……”[3]好吧,实际上没有那么久啦,那是在2000年接近年底的时候,Apress出版公司正式运营刚满一年。当时,我们只是一家非常小的计算机书籍出版商,毫无名气。那一年,我们计划出版的书籍只有很少几本,大概只相当于Apress那......
  • 量产部落厉害了,这就是为什么都去量产部落下载SSD固件?
    众所周知,量产部落网是一个专业的开卡软件下载网站,提供了最新的软件版本和安全的下载渠道,而且开卡软件都是原厂发布,可以保证兼容性和稳定性。大家可以在这个网站上获取到大量专业的U盘、固态硬盘开卡软件(也叫量产工具)。有需要的话还是推荐去注册一下,的确很方便快捷,毕竟目前国内国......