Submission #1358068

#TimeUsernameProblemLanguageResultExecution timeMemory
1358068guguguggugBitaro’s Party (JOI18_bitaro)C++20
7 / 100
2015 ms264372 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long 

void dbg(){cout<<"\033[0m";}
template<typename T,typename... args>
void dbg(T f,args... a){cout<<"\033[95m"<<f;dbg(a...);}
#define dbg(...)

int n,m,q;
const int K = 120;
vector<int> back[(int)1e5+5];
int dp[(int)1e5+5];

// store up to K longest path to any node.
vector<pair<int,int>> path[(int)1e5+5];

signed main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    cin>>n>>m>>q;
    for(int i=1;i<=m;i++){
        int u,v;cin>>u>>v;
        back[v].push_back(u);
    }
    for(int i=1;i<=n;i++){
        vector<pair<int,int>> temp;
        temp.push_back({0ll,i});
        for(int v:back[i]){
            for(auto g:path[v]){
                temp.push_back({g.first+1,g.second});
            }
        }
        sort(temp.rbegin(),temp.rend());
        set<int> check;
        for(auto &[s,u]:temp){
            if(check.find(u) != check.end())continue;
            path[i].push_back({s,u});
            check.insert(u);
        }
        if(path[i].size() > K)path[i].resize(K);
    }

    while(q--){
        int T,Y;cin>>T>>Y;
        set<int> NO;
        for(int i=1;i<=Y;i++){
            int x;cin>>x;NO.insert(x);
        }
        int ans = -1;
        if(Y>=K){
            fill(dp+1,dp+1+T,-1);
            dp[T] = 0;
            for(int i=T;i>=1;i--){
                int ok = (NO.find(i) == NO.end());
                if(dp[i]==-1)continue;
                if(ok)ans = max(ans,dp[i]);
                for(int v:back[i])dp[v] = max(dp[v],dp[i]+1);
            }
        }
        else{
            for(auto x:path[T]){
                if(NO.find(x.second) == NO.end()){
                    ans = x.first;
                    break;
                }
            }
        }
        cout<<ans<<'\n';
    }

    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...