#include <bits/stdc++.h>
using namespace std;
vector<int>g[100001],vis;
int dfs(int a,int k)
{
int res=-1;
if(vis[a]!=k)res=0;
for(auto i:g[a])
{
int temp=dfs(i,k);
if(temp!=-1)res=max(res,temp+1);
}
return res;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n,m,q,a,b,x;
cin>>n>>m>>q;
vis.resize(n+1);
for(int i=0;i<m;i++)
{
cin>>a>>b;
g[b].push_back(a);
}
vector<vector<pair<int,int>>>dp(100001);
for(int i=1;i<=n;i++)
{
vector<pair<int,int>>temp;
temp.push_back({0,i});
for(auto j:g[i])
{
for(auto p:dp[j])
{
temp.push_back({-p.first-1,p.second});
}
}
sort(temp.begin(),temp.end());
for(int j=0;j<temp.size();j++)
{
if(dp[i].size()==100)break;
if(vis[temp[j].second]==i)continue;
auto p=temp[j];
vis[p.second]=i;
dp[i].push_back({-p.first,p.second});
}
}
for(int i=0;i<=n;i++)
{
vis[i]=-1;
}
for(int i=0;i<q;i++)
{
cin>>x>>a;
for(int j=0;j<a;j++)
{
cin>>b;
vis[b]=i;
}
if(a<100)
{
int res=-1;
for(auto p:dp[x])
{
if(vis[p.second]!=i)
{
res=p.first;
break;
}
}
cout<<res<<"\n";
}
else
{
cout<<dfs(x,i)<<"\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... |