abc 302

E Isolation

  • 别忘了 set 有 O(logn) 的 erase 函数, 别去看什么 vector O(1) 删除
  • 其他没啥, 暴力做就行(均摊 O(nlogn)

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
  • 交换的位置一定构成一个环
  • 开始分类讨论
    • 如果 ai==bj&&aj==bi 那么直接交换 i,j 是最优的(1 次操作)
    • 否则, 如果ai==bj&&aj==bk&&ak==bi 那么交换 i,j,k 是除 1 之外最优的(2 次操作)
    • 再否则, 如果ai==bj&&aj==bk&&ak==bl&&al==bi 那么除了交换 i,j,k,l 外别无选择(3 次操作)
    • 因为只有 4 个不同的数, 所以最多构成一个四元环, 不会再有其他情况了
  • 枚举每一种情况即可

Ex Ball Collector

  • Trick

    • 如果将 ai,bi 连边, 将构成一棵树或者一个连通图(边代表一个点 i)

    • 对于一棵 k 个节点的树, 最多可以选出 k - 1 个不同的球

    • 对于一个 k 个节点的图, 最多可以选出 k 个不同的球

  • 所以只要在 Dfs 时维护形成的树和图的个数即可, 用到可撤销并查集

  • 过程挺麻烦,略了

posted on   Bubble_e  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话



点击右上角即可分享
微信分享提示