#include <bits/stdc++.h>
using namespace std;
void fast_io(){
ios::sync_with_stdio(0);
cin.tie(nullptr); cout.tie(nullptr);
}
#define int long long
#define endl '\n'
#define ra(v) (v).rbegin(), (v).rend()
const int N = 1e5 + 5;
const int K = 300;
int n, m, q, indeg[N];
vector<int> adj[N];
pair<int,int> L[N][K];
int sz[N];
int topo[N], topo_size;
pair<int,int> tmp[2*K];
void merge_lists(int u, int v) {
int k=0;
for(int i=0;i<sz[u];i++) tmp[k++]={L[u][i].first+1, L[u][i].second};
for(int i=0;i<sz[v];i++) tmp[k++]={L[v][i].first, L[v][i].second};
sort(tmp,tmp+k,[](pair<int,int> &a,pair<int,int> &b){return a.second<b.second;});
int idx=0;
for(int i=0;i<k;){
int src=tmp[i].second, best=tmp[i].first, j=i+1;
while(j<k && tmp[j].second==src){best=max(best,tmp[j].first); j++;}
L[v][idx++]={best, src};
i=j;
if(idx==K) break;
}
sz[v]=idx;
sort(L[v], L[v]+sz[v], greater<pair<int,int>>());
}
void init_topo() {
int IN[N];
for(int i=1;i<=n;i++) IN[i]=indeg[i];
queue<int> q;
for(int i=1;i<=n;i++){if(IN[i]==0) q.push(i);}
topo_size=0;
while(!q.empty()){
int u=q.front(); q.pop();
topo[topo_size++]=u;
for(int v:adj[u]){
merge_lists(u,v);
if(--IN[v]==0) q.push(v);
}
}
}
signed main(){
fast_io();
cin>>n>>m>>q;
for(int i=1;i<=m;i++){
int u,v; cin>>u>>v; indeg[v]++; adj[u].push_back(v);
}
for(int i=1;i<=n;i++){L[i][0]={0,i}; sz[i]=1;}
init_topo();
while(q--){
int T,Y; cin>>T>>Y;
vector<int> C(Y);
unordered_set<int> bad; bad.reserve(Y*2);
for(int i=0;i<Y;i++){cin>>C[i]; bad.insert(C[i]);}
if(Y<=K){
bool found=0;
for(int i=0;i<sz[T];i++){
if(!bad.count(L[T][i].second)){cout<<L[T][i].first<<endl; found=1; break;}
}
if(!found) cout<<-1<<endl;
} else {
int ans[N];
for(int i=1;i<=n;i++) ans[i]=0;
for(int x:bad) ans[x]=-1e18;
for(int i=0;i<topo_size;i++){
int u=topo[i];
for(int v:adj[u]) ans[v]=max(ans[v],ans[u]+1);
}
if(ans[T]<0) cout<<-1<<endl; else cout<<ans[T]<<endl;
}
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |