Submission #1318756

#TimeUsernameProblemLanguageResultExecution timeMemory
1318756exoworldgdBitaro’s Party (JOI18_bitaro)C++20
0 / 100
18 ms7568 KiB
#include <bits/stdc++.h>
#define exoworldgd cin.tie(0)->sync_with_stdio(0), cout.tie(0)
#define int long long
using namespace std;
const int inf=LLONG_MAX,mod=1e9+7,N=1e5+5,B=320;
int n,m,q,dp[N];
vector<int>g[N];
vector<pair<int,int>>best[N];
signed main(void) {
    exoworldgd;
    cin>>n>>m>>q;
    for(int i=0,u,v;i<m;i++)cin>>u>>v,g[v].push_back(u);
    for(int i=1;i<=n;i++){
        best[i].push_back({0,i});
        for(int u:g[i])for(auto [d,v]:best[u])best[i].push_back({d+1,v});
        sort(best[i].rbegin(),best[i].rend());
        if(best[i].size()>B)best[i].resize(B);
    }
    for(int t,y,ans,busy[100005];q--;){
        cin>>t>>y,ans=-1,memset(busy,0,sizeof busy);
        for(int i=0,c;i<y;i++)cin>>c,busy[c]=1;
        if(y<B)for(auto[d,v]:best[t])if(!busy[v]){ans=d;break;}
    	else{
            fill(dp,dp+n+1,-1),dp[t]=0;
            for(int i=t;i;i--)if(dp[i]^-1)for(int u:g[i])dp[u]=max(dp[u],dp[i]+1);
            for(int i=1;i<=n;i++)if(!busy[i]&&dp[i]^-1)ans=max(ans,dp[i]);
        }
        cout<<ans<<"\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...