当前位置: 首页 > news >正文

题解:P15049 [UOI 2022 II Stage] 图 2

前言

套路题。

目前是双倍经验的最优解和这个题的最优解。

思路

发现有回溯操作,考虑经典转化建出操作树变成可撤销问题,因为有连边操作,所以使用可撤销并查集维护连通性。

维护第 \(k\) 大,我们通常使用值域分块解决,考虑对每个并查集的根维护所在集合内的答案。在可撤销并查集合并的时候合并答案,类似于启发式合并。这样复杂度是 \(O(n\sqrt{n \log n})\),可以通过。

具体实现可以看代码。

代码

constexpr int N = 5e5 + 2;
int n, m, A[N], B[N], fa[N], g, siz[N], ans[N], typ[N], D, K, cnt;
int f[N][810];
int p[N], hd[N], to[N << 1], nxt[N << 1];
inline void add(int u, int v){ nxt[++cnt] = hd[u], to[cnt] = v, hd[u] = cnt;}
inline int find(int x){ return x == fa[x] ? x : find(fa[x]);}
inline void dfs(int u){bool flag = 0;if(typ[u] == 2){A[u] = find(A[u]), B[u] = find(B[u]);if(A[u] ^ B[u]){flag = 1;if(siz[A[u]] < siz[B[u]]) swap(A[u], B[u]);siz[A[u]] += siz[B[u]], fa[B[u]] = A[u];for(int i = 1; i <= K; ++i) f[A[u]][i] += f[B[u]][i];}}else if(typ[u] == 1){int s = B[u], rt = find(A[u]), y = 0; if(s > siz[rt]) ans[u] = -1;else{for(int i = 1; i <= K && !y; i++) s > f[rt][i] ? s -= f[rt][i] : y = i;for(int i = (y - 1) * D + 1; i <= y * D  && s; ++i) if(find(p[i]) == rt) --s, ans[u] = p[i];}}for(int i = hd[u]; i; i = nxt[i]) dfs(to[i]);if(flag){siz[A[u]] -= siz[B[u]], fa[B[u]] = B[u];for(int i = 1; i <= K; ++i) f[A[u]][i] -= f[B[u]][i];}
}
int main(){#ifndef ONLINE_JUDGEfreopen("data.in","r",stdin);freopen("data.out","w",stdout);#endifcin >> n >> m >> g; D = sqrt(n) * 1.5 + 1, K = (n - 1) / D + 1;for(int i = 1; i <= n; ++i) p[i] = i, siz[fa[i] = i] = 1,  ++f[i][(i - 1) / D + 1];for(int i = 1; i <= m; ++i){cin >> typ[i];if(typ[i] == 1) cin >> A[i] >> B[i], add(i - 1, i);else if(typ[i] == 2) cin >> A[i] >> B[i], add(i - 1, i);else cin >> A[i], add(A[i], i);}   dfs(0);for(int i = 1; i <= m; ++i) if(typ[i] == 1) cout << ans[i] << '\n';return 0;
}
http://www.jsqmd.com/news/333828/

相关文章:

  • 机器学习算法基本型 聚类(笔记)
  • 计算机SSM毕设实战-基于ssm+vue的“e博士”高考志愿辅助填报系统的设计与开发【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 37岁程序员转行大模型?一篇说清实操方法
  • 闭眼入!10个AI论文软件深度测评,本科生毕业论文写作必备工具推荐
  • 计算机SSM毕设实战-基于ssm的商铺租赁管理系统的设计与实现基于SSM框架的门面房屋租赁管理系统项目【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • <span class=“js_title_inner“>从商鞅变法到团队管理:能复制的强大,从来都不靠“能人”</span>
  • 大模型(LLM)完全指南:AI范式转变与认知基础设施详解
  • 2026国内最新硅酮胶生产商top5推荐!江苏、山东、云南、成都等地优质优质硅酮胶品牌权威榜单发布,多场景适配的高品质硅酮胶精选推荐 - 品牌推荐2026
  • java毕设选题推荐:基于java的短剧推荐系统设计与实现基于Java+SSM的短剧推荐系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 大模型四大支柱RAG/Skill/Memory/Workflow实战指南:从概念混淆到产业落地
  • 无人机城市管理“AI+虚仿”创新实训室,开辟城市管理产教融合智慧职教新路径
  • 2026Java程序员金三银四面试突击有它就够了!
  • LLM智能体架构设计与评估体系详解:从理论到实践,建议收藏
  • 程序员必学:大模型核心概念解析与实战应用指南
  • Si8751AB-IS,导通82μs/关断46μs的快速固态继电器驱动芯片
  • SSM毕设选题推荐:基于ssm的“e博士”高考志愿辅助填报系统的设计与开发基于SSM高考志愿辅助填报系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026年天虹购物卡回收平台盘点,新手也能轻松上手 - 京回收小程序
  • 零基础转计算机不迷茫!2026 就业全景分析:岗位拆解 + 分阶精通路径
  • 一文讲透|9个AI论文软件测评:研究生毕业论文+科研写作必备工具推荐
  • 计算机毕业设计之springboot基于JAVA白云山景点门票销售管理系统
  • 毕业设计(论文)开题报告 基于Django的在线论坛设计与实现
  • 三阶魔方还原
  • 计算机java短剧推荐系统,具备短剧信息管理、互动论坛和资讯推送功能毕设实战-基于java的短剧推荐系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 创客匠人生态启示:创始人IP打造中的人机协同方法论与边界思考
  • <span class=“js_title_inner“>为什么程序员不自己开发微信小程序这类似的东西赚钱?</span>
  • 【JPCS出版、EI检索稳定】2026年航空航天、智能感知与控制国际学术会议(AIPC 2026)
  • 美食介绍 07: 成都火锅
  • 【课程设计/毕业设计】基于ssm的体育器材管理系统设计与实现高校体育器材管理系统的设计与实现【附源码、数据库、万字文档】
  • 创客匠人生态观察:知识产品用户体验的五层重构与AI智能体赋能逻辑
  • 【课程设计/毕业设计】基于Java+SSM的短剧推荐系统设计与实现基于java的短剧推荐系统设计与实现【附源码、数据库、万字文档】