Submission #670581

#TimeUsernameProblemLanguageResultExecution timeMemory
670581bachhoangxuanBitaro’s Party (JOI18_bitaro)C++17
100 / 100
959 ms183260 KiB
#include<bits/stdc++.h> using namespace std; #define maxn 100005 #define pii pair<int,int> namespace fmap{ int tm=0,pos[maxn]; void clear(){tm++;} bool find(int x){ if(pos[x]==tm) return true; return false; } void insert(int x){ pos[x]=tm; } } const int bl=2e2+20; int sz[maxn],n,m,q,dp[maxn]; vector<int> edge[maxn]; pii d[maxn][bl],tmp[2*bl]; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); cin >> n >> m >> q; for(int i=1;i<=n;i++){sz[i]=1;d[i][0]={-1,i};} for(int i=1;i<=m;i++){ int u,v;cin >> u >> v; edge[u].push_back(v); } for(int i=1;i<=n;i++){ for(int j=0;j<sz[i];j++) d[i][j].first++; for(int v:edge[i]){ merge(d[v],d[v]+sz[v],d[i],d[i]+sz[i],tmp,greater<pii>()); int cc=sz[i]+sz[v]; sz[v]=0; fmap::clear(); for(int j=0;j<cc;j++){ if(fmap::find(tmp[j].second)) continue; d[v][sz[v]++]=tmp[j]; fmap::insert(tmp[j].second); if(sz[v]==bl) break; } } } for(int i=1;i<=q;i++){ int u,k;cin >> u >> k; fmap::clear(); for(int i=1;i<=k;i++){ int a;cin >> a; fmap::insert(a); } if(k<bl){ int ans=-1; for(int j=0;j<sz[u];j++){ if(fmap::find(d[u][j].second)) continue; ans=d[u][j].first; break; } cout << ans << '\n'; } else{ for(int i=1;i<=n;i++){ if(fmap::find(i)) dp[i]=-1; else dp[i]=0; } for(int i=1;i<=n;i++){ if(dp[i]==-1) continue; for(int v:edge[i]) dp[v]=max(dp[v],dp[i]+1); } cout << dp[u] << '\n'; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...