This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/*
:-=-
:%@@@@@@@@@=
.#@@@@@%@%@@@@@@=
-@@@@@@@@@@@@@@@@@#
.+@@@@@@@@@@@@@@@@@@@@.
#@@@@@@@@@@@@@@@@@@@@@%
.*@@@@@@@@@@@@@@@@@@@@@@@= / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
.@@@@@@@@@@@@@@@@@@@@@@@@# | lftroq ♥ |
+@@@@@@@@@@@%%@@@@@@@@@@@@- \_________/
.%@@@@@@@@@@%##%@@@@@@@@@@@# //
-@@@@@@@@%%%%%%%%%@@@@@@@@@@:
-+- =@@@@@%##%#%##**+#@@@@@@@@@@-
.+++.%@@@%##%%%%%%%#**+##%%@@@@@@+
+=*%@@@#*###%%#=--+=+*##%@@@@@@%.
:*+%@@*+**##*=======+***#@@@@@@@:
=+++**%@###*=++=-==++**#@@@@@@@:
.**===*%@@@##+=**#*==***@@@@@@@@@:
:+++=+*+%%@@%#==+*%#*+=++@@@@@@@@%
.**#*+*+**+%#+=---=***+==*@@@@@@@:
:**#*+=+**@%##*%#++++--=++#@@@@@@@+-::.
=%**###**#@@%*=*%%%%%*==++++%@@@@@@#=-----.
.%@@%***###@@@%*++%%%#*===+=++++%@@@@%*=-----=.
=**##+=+##@@@@=+%+=***#%@#+**++++%@@%+=-------=:
.++===++====@@@@+--==-=#%%%%+++*++++#%+=------==+=.
-++--=++-:::::=#@#----+--*%%*+**+++++++==-----===--+=
:*+=--++-::::::--=-----==-=%==+%%***++=---=---===-=++:
:*+--+=-::::::::---:----+=-=++##***===-::::-+----=*+:
.=--:::.:::-=-::---::--------++--=====-::::--:-==++
:=::::::--::::::--=+-:--++++==++--==:::-:::----==+=
*-:::::::.....:-++++++++++++++=+=---::::===-:------
:+:--:......:-+++++++++++++++++====---:--=-=----:-:=.
:==--:::.:=+++++++++++++++++++++-::===-:-===-----=--:
.+=--:::-:=+++++==++++++++++++++=--:.:-===+-------+=-.
.+==-----::-+++-:+++=====+++++++=--=======--:----==+=.
:+===-----------:-++====+++++++++=--==--+-:------==-::
+=====-::----+-::-+====+++++++++++=---==:-===:-==-==.
:+===========+-::::-----+++++++++++*=--======-=+=-=.
.=========++=-::::::----:::-++++++*+=+======+++==.
.=========-::::::-----:::=+++++**+=+**====-:. .
*======-::::::::-:-----++++++++==++++++-
#======-:::::::::-------++++++++====+++=
=======-:::::::::----:::=+++++++=====+++
=====---:::::::::::------=++++++===+==++=
:===-:--:::::::::::-------+++++++===++=++
.===-:--:::::::::::::-----=+++++====++===.
.+=-::--::::::::::::-:-----++++++====++=+:
.=-:::--::::::::::::-------=+++++===-----+=
.=-:::--:::::::::::---------=++++==-----==+=.
.=-:::---:::::::::::---------+++===-----===++.
.=::::---:::::::-:-----------=++==-:-----===+-
.--:::---:::::::--------------=+=----==--===+-
.=::::---::::::::::-------===--==-------=--==:
.=--::--::::----:---:::::-:----:::-----======-
.=---:--:::---::::::--------------------==++++
*/
#include <bits/stdc++.h>
#define fastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define MOD 1000000007ll
#define MOD2 998244353ll
#define endl '\n'
#define PI acos(-1)
#define INFINITE 1000000000
#define INFINITE2 1000000000000000000ll
#define llll pair<ll,ll>
#define ldld pair<ld,ld>
#define fi first
#define se second
#define sqrt sqrtl
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
using namespace std;
const int mn=100005;
const int block=350;
vector<int> graph[mn],rraph[mn];
vector<pair<int,int>> god[mn];
int vis[mn],dp[mn],vv[mn];
void solve()
{
int n,m,q;
cin >> n >> m >> q;
while(m--)
{
int u,v;
cin >> u >> v;
graph[u].push_back(v);
rraph[v].push_back(u);
}
for(int u=1;u<=n;u++)
{
for(int j=0;j<(int)rraph[u].size();j++)
{
int v=rraph[u][j];
vector<pair<int,int>> par;
god[v].push_back({0,v});
int a=0,b=0;
int sa=god[v].size(),sb=god[u].size();
while(par.size()<block&&(a<sa||b<sb))
{
if(b==sb||(a!=sa&&god[v][a].fi+1>=god[u][b].fi))
{
god[v][a].fi++;
par.push_back(god[v][a]);
vis[god[v][a].se]=1;
god[v][a].fi--;
a++;
}
else
{
par.push_back(god[u][b]);
vis[god[u][b].se]=1;
b++;
}
while(a<sa&&vis[god[v][a].se]) a++;
while(b<sb&&vis[god[u][b].se]) b++;
}
god[v].pop_back();
for(int i=0;i<(int)par.size();i++) vis[par[i].se]=0;
swap(god[u],par);
}
}
while(q--)
{
int t,y;
cin >> t >> y;
vector<int> c(y);
for(int i=0;i<y;i++)
{
cin >> c[i];
vv[c[i]]=1;
}
int ans=-1;
if(y>=block)
{
for(int i=1;i<=n;i++) dp[i]=-1;
for(int i=t-1;i;i--)
{
for(int j=0;j<(int)graph[i].size();j++) if(dp[graph[i][j]]!=-1) dp[i]=max(dp[i],dp[graph[i][j]]+1);
if(!vv[i]) ans=max(ans,dp[i]);
}
}
else
{
for(int i=0;i<(int)god[t].size();i++) if(!vv[god[t][i].se])
{
ans=god[t][i].fi;
break;
}
}
cout << ans << endl;
for(int i=0;i<y;i++) vv[c[i]]=0;
}
}
int main()
{
fastIO
//freopen("hanhhhh.inp","r",stdin);
//freopen("hanhhhh.out","w",stdout);
int t=1;
//cin >> t;
while(t--)
solve();
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... |