#include "bits/stdc++.h"
using namespace std;
#define LOG(n) (63 - __builtin_clzll((n)))
#define fi first
#define se second
#define pii pair<int,int>
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
#define pb push_back
#define ll long long
const int N = 2e5+5;
const int S = 100;
int n,m,q;
vector<int> g[N];
pii f[N][S+5];
int dp[N];
bool ban[N];
void mg(pii a[], pii b[]){
static pii t[2*S+5];
int l = 1, r=1;
int st=0;
while(l<=S&&r<=S){
if(a[l].fi>b[r].fi+1){
t[++st] = a[l++];
}
else t[++st] = {b[r].fi+1, b[r].se}, r++;
}
while(l<=S){
t[++st] = a[l++];
}
while(r<=S){
t[++st] = {b[r].fi+1, b[r].se};
r++;
}
unordered_set<int> uni;
for(int i=1, pt =0;i<= st;i++){
if(uni.count(t[i].se)) continue;
uni.insert(t[i].se);
a[++pt] = t[i];
if(pt==S) break;
}
}
void preprocess(){
fill_n(&f[0][0],sizeof(f)/sizeof(f[0][0]), make_pair(-1e9,-1));
for(int u=1;u<=n;u++) f[u][1] = {0,u};
for(int u=1;u<=n;u++){
for(auto &v: g[u]){
mg(f[v], f[u]);
}
}
// for(int i=1;i<=5;i++) cerr<<f[2][i].fi<<" "<<f[2][i].se<<"\n";
}
signed main(){
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);
if(fopen("TASK.INP", "r")){
freopen("TASK.INP", "r", stdin);
freopen("TASK.OUT", "w", stdout);
}
cin>>n>>m>>q;
for(int i=1;i<=m;i++){
int u,v; cin>>u>>v;
g[u].pb(v);
}
preprocess();
while(q--){
int t,y; cin>>t>>y;
static int qr[N];
for(int i=1;i<=y;i++){
cin>>qr[i]; ban[qr[i]] = true;
}
if(y>=S){
memset(dp,-1,sizeof(dp));
dp[t]= 0;
int ans = ban[t]? -1: 0;
for(int i=t-1;i>=1;i--){
for(auto &v: g[i]){
if(dp[v]==-1) continue;
dp[i] = max(dp[i], dp[v]+1);
}
if(dp[i]!=-1){
if(!ban[i]) ans = max(ans, dp[i]);
}
}
cout<<ans<<"\n";
}
else{
bool flag = false;
for(int i=1;i<=S;i++){
if(f[t][i].se==-1) break;
if(!ban[f[t][i].se]) {
cout<<f[t][i].fi<<"\n";
flag = true;
break;
}
}
if(!flag) cout<<-1<<"\n";
}
for(int i=1;i<=y;i++) ban[qr[i]] = false;
}
}
컴파일 시 표준 에러 (stderr) 메시지
bitaro.cpp: In function 'int main()':
bitaro.cpp:64:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
64 | freopen("TASK.INP", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:65:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
65 | freopen("TASK.OUT", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |