并查集 D. Shark [Codeforces Round 484(Div. 2)]

news/2025/10/3 18:11:01/文章来源:https://www.cnblogs.com/Reisentyan/p/19124821

一道还行的并查集,刚开始写的以为是带权并查集,写着写着发现其实不用太麻烦
题目大意是:需要找到一个值 k,使得数组中所有小于 k 的数字构成的连通块满足以下条件:

所有连通块的大小相同
连通块的数量尽可能多
在满足前两个条件下,k 的值尽可能小

如何寻找这个 k 呢?
二分显然不行,不满足单调性
那就直接从小到大枚举呗
每次枚举到一个数字,看看它前面后面是不是可以连起来
可以连起来就合并,使用并查集来维护连通块的大小
用map判断连通块大小及数量是否合格
然后扫一遍就做完了

#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
#define ffp(x,y,z) for(ll (x)=(y);(x)<=(z);(x++))
#define ll long long int
#define q_ read()
inline ll read()
{ll x = 0, f = 1;char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9')x = x * 10 + ch - '0', ch = getchar();return x * f;
}void solve()
{int n = q_;vector<int>num(n + 2, 0);vector<int>id(n + 2, 0);vector<int>fa(n + 2, 0);vector<int>sz(n + 2, 0);//以i为根的子树的大小vector<bool>vis(n + 2, 0);map<int, int>ma;//判断答案用的ffp(i, 1, n){num[i] = q_;id[i] = i;fa[i] = i;sz[i] = 1;}auto cmp = [&](int a, int b)->bool{return num[a] < num[b];};sort(id.begin() + 1, id.end() - 1, cmp);auto find = [&](auto&& find, int a)->int{return a == fa[a] ? a : fa[a] = find(find, fa[a]);};int ans = num[id[1]];int lon = 0;ffp(i, 1, n){int x = id[i];//将这个位置的前面和后面连起来vis[x] = 1;sz[x] = 1;ma[sz[x]] += 1;int ba = find(find, min(x + 1, n));//找后一个,合并if (ba != x && vis[ba])//如果是没有出现过的数字,就别合并{ma[sz[x]]--;ma[sz[ba]]--;if (ma[sz[ba]] == 0)ma.erase(sz[ba]);if (ma[sz[x]] == 0)ma.erase(sz[x]);sz[x] += sz[ba];fa[ba] = x;ma[sz[x]]++;sz[ba] = 0;}int fr = find(find, max(x - 1, 1));//找前一个的根,看是谁if (fr != x && vis[fr]){//合并两根ma[sz[fr]] -= 1;ma[sz[x]] -= 1;if (ma[sz[fr]] == 0)ma.erase(sz[fr]);if (ma[sz[x]] == 0)ma.erase(sz[x]);sz[fr] += sz[x];fa[x] = fr;ma[sz[fr]]++;sz[x] = 0;}//记得判断是否删除了某个节点//合并后统计答案if (ma.size()==1){for (auto [v, cnt] : ma){if (cnt > lon){ans = num[x];lon = cnt;}}}}cout << ans+1 << endl;
}int main()
{int t = 1;while (t--){solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:Spark核心技术解析:从RDD到Dataset的演进与实践

实用指南:Spark核心技术解析:从RDD到Dataset的演进与实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consol…

随笔0

设计网页时,如果遇到float 一定要注意下面的元素要 clear,不然会有bug

电子商务网站建设考试题网站后台怎么进入wordpress

官网提供相关API GDI 基本图形功能_drawing 高级二维和矢量图形功能_drawing2D GDI 图像处理功能_Imaging GDI 排版功能_text Windows 窗体应用程序提供打印功能_Printing 像素 构成图像的最小单位就是像素&#xff1b;屏幕上显示不管是位图或者矢量图&#xff0c;当描述…

加密算法基本原理、特点及采用场景

加密算法基本原理、特点及采用场景pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

Hackersdaddy ROUGE CTF 2025 完整解题记录

本文详细记录了在Hackersdaddy CTF 2025中解决全部13个挑战的完整过程,涵盖Web安全、OSINT、API利用、JWT伪造、GraphQL注入、SSTI、IDOR、LFR和SSRF等多种技术,展示了真实世界安全漏洞的挖掘与利用方法。Hackersdad…

学习comfyui

学习comfyuivae模块: vae 解码模块: 把latent -->image 输出可以连接为保存或者预览.VAE 节点配置与使用 模型来源 默认加载:通过 Load Checkpoint 节点加载大模型时,自动绑定其内置的 VAE。 独立加载:使用 VAE …

完整教程:uniapp 日历组件 uni-datetime-picker

完整教程:uniapp 日历组件 uni-datetime-pickerpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

个人二级网站怎么做汽车精品设计网站建设

让手机通过电脑上网的方式有很多种&#xff0c;最常见的就是 WIFI 了&#xff0c;而且简单直接。但是有时候台式机没有 WIFI &#xff0c;或者电脑的 WIFI 设备已经连接到其他的网络了&#xff0c;这时候手机就不能通过电脑的 WIFI 连接到网络。那么还没有有办法连接到网络呢&a…

实用指南:精读C++20设计模式:行为型设计模式:中介者模式

实用指南:精读C++20设计模式:行为型设计模式:中介者模式2025-10-03 17:55 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

c 网站开发引擎wordpress 后台翻译

一 前言MySQL 5.7.8 之后 支持 JSON (由rfc7159规定)数据类型&#xff0c;其能在字段中使用json 类型&#xff0c;做到了自动校验是否为json类型数据&#xff0c;否则插入数据会报异常&#xff1b;其次&#xff0c;储存json数据内部做到了优化储存&#xff0c;能够快速读取json…

成都医院手机网站建设宁波网站推广优化外包公司

动动发财的小手&#xff0c;点个赞吧&#xff01; 简介 作为理解、生成和处理自然语言文本的有效方法&#xff0c;自然语言处理&#xff08;NLP&#xff09;的研究近年来呈现出快速传播和广泛采用。鉴于 NLP 的快速发展&#xff0c;获得该领域的概述并对其进行维护是很困难的。…

查看cuda型号.

查看cuda型号.cmd打开命令行:执行命令:nvidia-smi这里展示CUDA的版本号是与当前 GPU 驱动(driver)程序兼容的 CUDA 运行时版本。这是驱动程序支持的最高 CUDA 版本,并不是系统上安装的 CUDA的版本!!!!!!!!!!!!!!!…

AI元人文系列:透明推理者——下一代大模型架构设计

AI元人文系列:透明推理者——下一代大模型架构设计 引言:从“智能工具”到“思维伙伴” 人工智能正站在新的十字路口。当前的大模型能够创作诗歌、解答难题、生成代码,却无法清晰回答一个简单却关键的问题:“你为什…

个人随笔

设计网页时,如果遇到float 一定要注意下面的元素要 clear,不然会有bug

专做电器的网站怎么开网站做站长

利用图扑三维可视化技术展示园区在不同时间段的变化&#xff0c;提供全景漫游体验&#xff0c;帮助用户全方位感受和理解园区环境&#xff0c;实现智能化管理与优化。

Fedora Atomic Desktops

https://docs.fedoraproject.org/en-US/emerging/ Fedora Atomic DesktopsFedora Silverblue Fedora Silverblue is an atomic desktop operating system featuring the GNOME desktop, a beautiful, high-quality des…

完整教程:【论文阅读】具身人工智能:从大型语言模型到世界模型

完整教程:【论文阅读】具身人工智能:从大型语言模型到世界模型pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

Android达成RecyclerView粘性头部效果,模拟微信账单列表的月份标题平移

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【C语言】char * 、char [ ]、const char * 和 void *的使用以及区别

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

常德网站优化公司东莞大岭山天气预报

【我是谁】 1.学历&#xff1a;22届双非本科校企合作&#xff08;软外&#xff0c;软件工程服务外包&#xff09;&#xff0c;编程课大部分是印度的NIIT老师上课&#xff0c;印式英语一点儿听不懂。。。所以大学全都自学的&#xff0c;和非科班的也没什么区别和优势&#xff0c…