Submission #1318738

#TimeUsernameProblemLanguageResultExecution timeMemory
1318738ninstroyerTopical (NOI23_topical)C++20
100 / 100
518 ms166196 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long

const int nx = 1e6+5;

ll n,k,res,cnt[nx],p[nx];
priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> req[nx];
queue<int> q;

int main()
{
    ios::sync_with_stdio(false); cin.tie(0);
    cin>>n>>k;
    vector<vector<int>> r(n+1,vector<int>(k+1)), u(n+1,vector<int>(k+1));
    for(int i = 1; i <= n; i++) for(int j = 1; j <= k; j++) cin>>r[i][j];
    for(int i = 1; i <= n; i++) for(int j = 1; j <= k; j++) cin>>u[i][j], req[j].push({r[i][j],i});
    q.push(0);
    while(!q.empty())
    {
        q.pop();
        for(int i = 1; i <= k; i++)
        {
            while(!req[i].empty())
            {
                auto [re, mod] = req[i].top();
                if(re > p[i]) break;
                req[i].pop();
                cnt[mod]++;
                if(cnt[mod]==k) q.push(mod),res++;
            }
        }
        if(q.empty()) break;
        while(!q.empty())
        {
            int mod = q.front();
            q.pop();
            if(mod == 0) continue;
            for(int i = 1; i <= k; i++) p[i] += u[mod][i];
        }
        q.push(0);
    }
    cout<<res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...