CF1839B

发布时间 2023-10-23 10:11:40作者: Kazdale
  • 分析

    根据题意,对于亮度为\(a\)的灯,我们最多可以一次开\(a\)盏。
    显然我们选\(b\)最大的\(a\)盏灯就行,注意到\(b\)最大为\(1e9\),所以开long long。

  • 代码

#include <iostream>
#include <vector>
#include <algorithm>
#define int long long
using namespace std;
constexpr int MAXN(1000007);
vector <int> e[MAXN];
int T, n;
inline void read(int &temp) { cin >> temp; }
inline bool cmp(int x, int y) { return x > y; }
inline void work() {
	for (int i(1); i <= n; ++i)  e[i].clear();
	int ans(0);
	read(n);
	for (int i(1), a, b; i <= n; ++i)  read(a), read(b), e[a].push_back(b);
	for (int i(1); i <= n; ++i)  sort(e[i].begin(), e[i].end(), cmp);
	for (int i(1); i <= n; ++i) {
		if (!e[i].size())  continue;
		for (int j(0); j < min(i, (int)e[i].size()); ++j)  ans += e[i][j];
	}
	cout << ans << endl;
}
signed main() {
	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	read(T);
	while (T--)  work();
	return 0;
}