abc329F Colored Ball
有编号为1~n
的n个盒子,最初每个盒子里都有1个球,颜色为c[i]。有Q次询问,每次给出{a[i],b[i]},将编号为a[i]的盒子里的球全放进编号为b[i]的盒子里,要求输出操作后b[i]中有多少种颜色的球?
1<=n,Q<=2E5; a[i]!=b[i]
分析:用map维护每个盒子里不同颜色的球数,模拟即可,注意要用启发式合并。
#include <bits/stdc++.h> using i64 = long long; const int N = 200005; std::map<i64,i64> cnt[N]; int n, Q; void solve() { std::cin >> n >> Q; for (int i = 1; i <= n; i++) { i64 c; std::cin >> c; cnt[i][c] += 1; } for (int i = 1; i <= Q; i++) { i64 a, b; std::cin >> a >> b; if (cnt[a].size() < cnt[b].size()) { for (auto [k,v] : cnt[a]) { cnt[b][k] += v; } cnt[a].clear(); } else { for (auto [k,v] : cnt[b]) { cnt[a][k] += v; } cnt[b].clear(); std::swap(cnt[a], cnt[b]); } std::cout << cnt[b].size() << "\n"; } } int main() { std::cin.tie(0)->sync_with_stdio(0); int t = 1; while (t--) solve(); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】