chenfy27的刷题记录

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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;
}

posted on   chenfy27  阅读(11)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示