Submission #1317851

#TimeUsernameProblemLanguageResultExecution timeMemory
1317851channkTopical (NOI23_topical)C++20
100 / 100
450 ms107444 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

const int MAX = 1e6+5;
priority_queue<pair<ll,int>> pq[MAX]; ll p[MAX]; int topics[MAX]; // ok topics per modules

int main(){
    cin.tie(nullptr)->ios_base::sync_with_stdio(false);

    int n,k; cin >> n >> k;
    vector<vector<ll>> gain(n+1, vector<ll>(k+1, 0));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=k;j++){
            ll r; cin >> r;
            pq[j].push({-r, i});
        }
    for(int i=1;i<=n;i++) for(int j=1;j<=k;j++) cin >> gain[i][j];

    int ans = 0;
    queue<int> q; q.push(0);
    while(!q.empty()){
        int m = q.front(); q.pop();
        for(int j=1;j<=k;j++){
            p[j] += gain[m][j];
            while(!pq[j].empty()){
                auto [r,mod] = pq[j].top();
                if(p[j] >= -r){
                    pq[j].pop();
                    if(++topics[mod]==k){
                        ans++;
                        q.push(mod);
                    }
                } else break;
            }
        }
    }

    cout << ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...