Submission #1161000

#TimeUsernameProblemLanguageResultExecution timeMemory
1161000damoonBitaro’s Party (JOI18_bitaro)C++20
0 / 100
4 ms4680 KiB
#include<bits/stdc++.h> using namespace std; //#pragma GCC optimize("O3,unroll-loops") //main //#pragma GCC target("avx2") //cf... //#pragma GCC target("sse4") //Quera #define ll long long typedef pair<int,int> pii; typedef pair<int,pii> pip; typedef pair<pii,int> ppi; #define f first #define s second #define all(x) x.begin(),x.end() #define unicorn(x) x.resize(unique(x.begin(),x.end())-x.begin()) #define pb(x) push_back(x) #define pp() pop_back() #define lc id<<1 #define rc lc|1 const int L = 1e5+10,sq = 224; const int inf = 1e9+10; const pii INF = pii(-inf,0); int n,m,q; vector<int> adj[L]; pii dp[L][sq+10]; int pt[L]; bool bad[L]; int pd[L]; vector<int> num; random_device device; default_random_engine rng(device()); #define randt(a,b) uniform_int_distribution<int64_t>(a,b)(rng) void pr(int* vv,int l,int r){for(int i=l;i<r;i++){cout<<vv[i]<<" ";}cout<<endl;} void pr(long long* vv,int l,int r){for(int i=l;i<r;i++){cout<<vv[i]<<" ";}cout<<endl;} void pr(pii* vv,int l,int r){for(int i=l;i<r;i++){cout<<"("<<vv[i].f<<" , "<<vv[i].s<<") ";}cout<<endl;} void pr(vector<int> vv){for(auto i:vv){cout<<i<<" ";}cout<<endl;} void pr(vector<long long> vv){for(auto i:vv){cout<<i<<" ";}cout<<endl;} void pr(vector<pii> vv){for(auto i:vv){cout<<"("<<i.f<<" , "<<i.s<<") ";}cout<<endl;} void reset(){ for(auto i:num) bad[i] = 0; num.clear(); } int main(){ //ofstream cout ("out.txt"); //ifstream cin ("in.txt"); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m>>q; for(int i=1;i<=m;i++){ int u,v; cin>>u>>v; adj[v].pb(u); } for(int i=1;i<=n;i++){ if(!adj[i].size()){ dp[i][1] = pii(0,i); for(int j=2;j<=sq;j++){ dp[i][j] = INF; } continue; } for(auto u:adj[i]){ pt[u] = 1; } dp[i][sq+1] = INF; for(int j=1;j<=sq;j++){ pii indi = INF; for(auto u:adj[i]){ while(bad[dp[u][pt[u]].s]) pt[u]++; indi = max(indi,pii(dp[u][pt[u]].f+1,dp[u][pt[u]].s)); } if(!bad[i]){ indi = max(indi,pii(0,i)); } if(indi.f < 0){ dp[i][j] = INF; continue; } dp[i][j] = indi; bad[indi.s] = 1; num.pb(indi.s); } for(auto x:num) bad[x] = 0; num.clear(); } for(int tt=0;tt<q;tt++){ int v,bd; cin>>v>>bd; reset(); for(int i=1;i<=bd;i++){ int inp; cin>>inp; bad[inp] = 1; num.pb(inp); } if(bd < sq){ int ans = -inf; for(int i=1;i<=sq;i++){ if(!bad[dp[v][i].s]){ ans = dp[v][i].f; break; } } if(ans < 0) cout<<-1<<'\n'; else cout<<ans<<'\n'; continue; } for(int i=1;i<=v;i++){ pd[i] = -inf; if(!bad[i]) pd[i] = 0; for(auto v:adj[i]){ if(!bad[v]) pd[i] = max(pd[i],pd[v]+1); } } if(pd[v] < 0) cout<<-1<<'\n'; else cout<<pd[v]<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...