社区讨论

Wrong Answer 52 pts 求调

P15258[USACO26JAN2] Declining Invitations S参与者 1已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mlnoiec1
此快照首次捕获于
2026/02/15 19:45
3 周前
此快照最后确认于
2026/02/19 23:55
2 周前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int N = 1e5 + 5;

int n, c, f[N], p[N], b[N];
basic_string <ll> t[N], ans;
priority_queue <int> a[N];
ll sum;

void dfs(int u) {
	while(b[u] < t[u].size()) {
		int h = t[u][b[u]];
		if(a[h].size() < f[h]) {
			a[h].push(u);
			sum += u;
			break;
		}
		else if(u < a[h].top()){
			int g = a[h].top();
			sum -= a[h].top();
			a[h].pop();
			a[h].push(u);
			sum += u;
			dfs(g);
			break;
		}
		b[u]++;
	}
}

int main() {
	ios :: sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> c;
	for(int i = 1; i <= c; i++) cin >> f[i];
	for(int i = 1; i <= n; i++) cin >> p[i];
	for(int i = 1; i <= n; i++) {
		int k, x;
		cin >> k;
		while(k--) {
			cin >> x;
			t[i] += x;
		}
	}
	for(int i = n; i >= 1; i--) {
		dfs(p[i]);
		ans += sum;
	}
	reverse(ans.begin(), ans.end());
	for(auto x : ans) cout << x << '\n';
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...