제출 #1169572

#제출 시각아이디문제언어결과실행 시간메모리
1169572adaawfTopical (NOI23_topical)C++20
100 / 100
333 ms103680 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
vector<pair<int, int>> g[1000005];
long long int f[1000005], dd[1000005], b[1000005], c[1000005];
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n, k;
    cin >> n >> k;
    vector<vector<int>> a(n + 1, vector<int>(k + 1));
    queue<int> q;
    for (int i = 1; i <= n; i++) {
        int flag = 0;
        for (int j = 1; j <= k; j++) {
            int x;
            cin >> x;
            g[j].push_back({x, i});
            flag |= x;
        }
        if (flag == 0) {
            q.push(i);
            dd[i] = 1;
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= k; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = 1; i <= k; i++) sort(g[i].begin(), g[i].end());
    int res = 0;
    while (!q.empty()) {
        int p = q.front();
        q.pop();
        res++;
        for (int i = 1; i <= k; i++) {
            f[i] += a[p][i];
            while (b[i] < n && g[i][b[i]].first <= f[i]) {
                c[g[i][b[i]].second]++;
                if (c[g[i][b[i]].second] == k && dd[g[i][b[i]].second] == 0) {
                    q.push(g[i][b[i]].second);
                    dd[g[i][b[i]].second] = 1;
                }
                b[i]++;
            }
        }
    }
    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...