제출 #1256136

#제출 시각아이디문제언어결과실행 시간메모리
1256136IrateBitaro’s Party (JOI18_bitaro)C++20
14 / 100
1016 ms121452 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int B = 50; /// ?
vector<int> G[N];
vector<pair<int, int>> D[N];
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m, q;
    cin >> n >> m >> q;
    for(int i = 0;i < m;++i){
        int u, v;
        cin >> u >> v;
        G[v].push_back(u);
    }
    for(int i = 1;i <= n;++i){
        multiset<array<int, 4>>ms;
        for(int j : G[i]){
            ms.insert({D[j][0].first + 1, D[j][0].second, j, 0});
        }
        while(!ms.empty()){
            int d = (*(--ms.end()))[0], node = (*(--ms.end()))[1], nd = (*(--ms.end()))[2], p = (*(--ms.end()))[3];
            D[i].push_back({d, node});
            ms.erase(--ms.end());
            if((int)D[nd].size() != p + 1){
                ms.insert({D[nd][p + 1].first + 1, D[nd][p + 1].second, nd, p + 1});
            }
        }
        D[i].push_back({0, i});
        while(D[i].size() > B + 1){
            D[i].pop_back();
        }
    }
    for(int i = 0;i < q;++i){
        int t, k;
        cin >> t >> k;
        set<int>v;
        for(int i = 0;i < k;++i){
            int a;
            cin >> a;
            v.insert(a);
        }
        int res = -1;
        if(k > B){
            vector<int>dp(n + 1, -1e9);
            dp[t] = 0;
            for(int i = t;i >= 1;--i){
                for(int j : G[i]){
                    dp[j] = max(dp[j], dp[i] + 1);
                }
            }
            for(int i = 1;i <= t;++i){
                if(v.find(i) == v.end())res = max(res, dp[i]);
            }
        }
        else{
            for(int i = 0;i < (int)D[t].size();++i){
                int d = D[t][i].first, nd = D[t][i].second;
                if(v.find(nd) == v.end())res = max(res, d);
            }
        }
        cout << res << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...