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

题解:P1196 [NOI2002] 银河英雄传说

P1196 [NOI2002] 银河英雄传说

这是一道绿题
核心考察点只有一个: 那就是带权并查集


\(\mathcal{Part\ I}\)

我们检查题意不难发现这道题的要求无非两个:
$\ \ $ 1 ) 维护多个链的不断合并,但是以链中某节点作为索引
$\ \ \ \ \ \ \ $ 所以我们考虑并查集
$\ \ $ 2 ) 查询两个节点是否在某个链中,并且求出他们之间的权值差
$\ \ \ \ \ \ \ $ 因为要查询权值,而且并查集没有什么很好的伴生算法,只能使用带权并查集


\(\mathcal{Part\ II}\)

实现过程的话。。。其实就是标程
讲一遍吧(
$\ $
初始化并查集,这里分两步:

合并的时候,我们把第一集合的祖先的祖先插到第二集合的祖先上
这时关键的点在于不用更新每一个第一集合的点
我们退而求其次,只更新第一集合原祖先到队头的距离和当前总集合的大小
最后因为还要路径压缩,在路径压缩的时候顺下来就好了


查询的时候,我们查询的时候因为也要调用find函数两次,所以也可以帮忙顺一遍并查集的权值
这里的代码框架的好处就在于,不管我们要进行哪些操作,我们的更新写在find里,导致我们不用担心合并-查询的数据崭新度
而我们查询的操作极其简单,查询两个节点的祖先是否在同一个
如果不是,输出 -1
如果是,那么输出他们两个在链上的权值差-1就好了,这个-1是因为要计算他们之间隔了多少个

非常愉快,这个代码就写完了
我这边单独把 find 贴出来方便理解


int Find(int x) {if (x == fa[x]) return x; //回溯操作int k = fa[x]; //临时变量fa[x] = Find(fa[x]); //路径压缩s[x] += s[k]; //更新权值大小b[x] = b[fa[x]]; //更新集合大小return fa[x]; //传递
}

\(\LARGE{\mathcal{CODE}}\)


#include <bits/stdc++.h>using namespace std;const int N = 3e4 + 10;
int T, fa[N], s[N], b[N];int Find(int x) {if (x == fa[x]) return x;int k = fa[x];fa[x] = Find(fa[x]);s[x] += s[k];b[x] = b[fa[x]];return fa[x];
}void SolveM() {int x, y;cin >> x >> y;int dx = Find(x);int dy = Find(y);fa[dx] = dy;s[dx] += b[dy];b[dx] = b[dy] = b[dy] + b[dx];
}void SolveC() {int x, y;cin >> x >> y;int dx = Find(x);int dy = Find(y);if (dx != dy) {cout << "-1" << endl;return;}cout << abs(s[x] - s[y]) - 1 << endl;
}int main() {ios::sync_with_stdio(false);    cin.tie(nullptr);cout.tie(nullptr);cin >> T;for (int i = 1; i <= 30000; i++) {fa[i] = i;s[i] = 0;b[i] = 1;}while (T--) {char ch;cin >> ch;if (ch == 'M') {SolveM();}if (ch == 'C') {SolveC();}}return 0;
}
http://www.jsqmd.com/news/18576/

相关文章:

  • 深入解析:【数据结构】顺序表0基础知识讲解 + 实战演练
  • 2025年流量控制阀厂家推荐排行榜,液压流量控制阀,气动流量控制阀,高压流量控制阀,精密流量控制阀批发公司推荐
  • 楼里网站开发完成,产品进入交代期
  • 比特币挖矿盈利能力9月下降超7%
  • LobeHub UI Kit
  • 实用指南:Chromium 138 编译指南 - Android 篇:配置depot_tools(四)
  • Nimm Game
  • 2025年陶瓷过滤机厂家权威推荐榜:真空/盘式/矿用/全自动/真空带式陶瓷过滤机,固液分离设备,尾矿处理设备,圆盘过滤机专业选购指南
  • 基于C++的远程键盘监控器设计与实现 - 教程
  • 2025年医药冷链运输厂家权威推荐榜:药品/临床样本/CAR-T/蛋白/诊断试剂/生物制品/血液/细胞/芯片全程温控,冷藏车/冷藏箱/保温箱/干冰/液氮及国际冷链进出口专业服务
  • 2025 装修公司推荐排行榜单:江苏/浙江/制药厂/厂房/实验室/办公室/店面/净化室装修公司推荐,实测老客复购率与专业能力
  • 零代码改造 + 全链路追踪!Spring AI 最新可观测性详细解读
  • xupt 3g移动开发实验室二面
  • 2025年连铸机设备厂家权威推荐榜:扇形段/大包回转台/钢包中间罐/结晶器总成/拉矫机/输送辊道等核心部件专业解析
  • React使用useLocation监听url地址变化,工具URLSearchParams获取参数
  • 碰一碰,秒更新!游戏近场快传助力多人联机无缝组队
  • Moka AI 驱动 HR系统转型实践案例:从技术探索到组织价值落地的全链路解析
  • 2025年服饰厂家权威推荐榜:棒球帽,卫衣,羽绒服源头厂家精选,潮流设计与舒适品质口碑之选
  • 字节跨平台框架 Lynx 开源:一个 Web 开发者的原生体验
  • 2025年10月北京昌平回龙观酒店推荐:对比评测榜助您锁定高性价比会议与度假之选
  • SLS指标监控
  • 2025年10月北京昌平回龙观酒店推荐榜:五家对比评测与实用选择指南
  • 阿里云SLB指标监控
  • 2025 年最新华侨生联考培训机构口碑推荐榜:聚焦优质教学服务,助力考生高效备考,附详细选择指南
  • 洛谷题单指南-进阶数论-CF632D Longest Subsequence
  • 2025 年最新推荐锯床实力厂家排行榜:龙门 / 数控 / 金属带锯床等多类型设备权威甄选优质企业角度/金属带/双立柱/小型/大型锯床厂家推荐
  • 2025织带厂家权威推荐:东莞永沣专业定制防水织带与飞织鞋面
  • 2025发电机厂家实力推荐:三澳新能源科技专业制造,高效稳定动力解决方案
  • 阿里云PolarDB监控
  • 2025年织带类厂家权威推荐榜:防水织带、鞋垫、编织包/针织包/飞织包包、松紧带、鞋带、织带、飞织鞋面源头企业精选