#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |