比赛 2026.5.30 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 雨和卡布奇诺 最终得分 100
用户昵称 终焉折枝 运行时间 1.208 s
代码语言 C++ 内存使用 10.24 MiB
提交时间 2026-05-30 09:23:11
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define pi pair<int, int>
#define umap unordered_map
#define pq priority_queue
#define mk make_pair
const int N = 1e5 + 5;

int n, m;
int l[N], k[N];
umap<int, ll> ut;
umap<int, pq<pi, vector<pi>, greater<pi> > > mp;
queue<int> q;
vector<pi> tsk[N];

int main(){
    freopen("Cappuccino.in", "r", stdin);
    freopen("Cappuccino.out", "w", stdout);
    cin.tie(0) -> ios::sync_with_stdio(0);
    
    cin >> n;
    
    for(int i = 1;i <= n;i ++){
        int t, u; cin >> t >> u;
        ut[t] = u;
    }
    
    cin >> m;
    
    for(int i = 1;i <= m;i ++){
        cin >> l[i];
        if(!l[i]) q.push(i);
        for(int j = 1;j <= l[i];j ++){
            int a, b; cin >> a >> b;
            mp[a].push(mk(b, i));
        }
        cin >> k[i];
        for(int j = 1;j <= k[i];j ++){
            int c, d; cin >> c >> d;
            tsk[i].push_back(mk(c, d));
        }
    }
    
    for(pi x : ut){
        int t = x.first, u = x.second;
//        pq<pi, vector<pi>, greater<pi> > Q = mp[t];
        while(!mp[t].empty()){
            pi now = mp[t].top();
            if(now.first > ut[t]) break;
            mp[t].pop();
            l[now.second] --;
            if(!l[now.second]) q.push(now.second);
        }
    }
    
    int ans = 0;    
    
    while(!q.empty()){
        int now = q.front();
        q.pop();
        for(pi x : tsk[now]){
            int t = x.first, u = x.second;
            ut[t] += u;
//            pq<pi, vector<pi>, greater<pi> > Q = mp[t];
            while(!mp[t].empty()){
                pi now = mp[t].top();
                if(now.first > ut[t]) break;
                mp[t].pop();
                l[now.second] --;
                if(!l[now.second]) q.push(now.second);
            }
        }
        ans ++;
    }
    
    cout << ans << '\n';
    return 0;
}