abc 302
E Isolation
- 别忘了 set 有
的 erase 函数, 别去看什么 vector 删除 - 其他没啥, 暴力做就行(均摊
)
F Merge Set
- 非常有意思的一道题
- 题意: 每次合并两个有交集的集合, 直到 1 和 M 在同一个集合中, 求最小步数
- 直接贪心不行, 我们发现能合并的两个集合特征很明显(有交集), 且代价为 1, 可以直接建边跑最短路
- 将所有包含 1 的集合编号作为起点, 包含 M 的作为终点
- 如果集合 k 含有元素 a 就从 k 向 a (此处 a 的编号为 a + n, 防止与集合编号冲突)连一条权值为 1 的边, 从 a 向 k 连一条权值为 0 的边
- 边权反过来也行, 但是不能两个都是 1, 否则会重复加(其实边权都设成 1 然后答案除以 2 也行)
- 然后 Dijkstra 就行
G Sort from 1 to 4
- 很特殊的一点: 题目中的数集是 1 - 4, 超级小
- 设原序列为 a, 最终的(升序)为 b
- 交换的位置一定构成一个环
- 开始分类讨论
- 如果
那么直接交换 是最优的(1 次操作) - 否则, 如果
那么交换 是除 1 之外最优的(2 次操作) - 再否则, 如果
那么除了交换 外别无选择(3 次操作) - 因为只有 4 个不同的数, 所以最多构成一个四元环, 不会再有其他情况了
- 如果
- 枚举每一种情况即可
Ex Ball Collector
-
Trick
-
如果将
连边, 将构成一棵树或者一个连通图(边代表一个点 i) -
对于一棵 k 个节点的树, 最多可以选出 k - 1 个不同的球
-
对于一个 k 个节点的图, 最多可以选出 k 个不同的球
-
-
所以只要在 Dfs 时维护形成的树和图的个数即可, 用到可撤销并查集
-
过程挺麻烦,略了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话