Submission #1161053

#TimeUsernameProblemLanguageResultExecution timeMemory
1161053damoonBitaro’s Party (JOI18_bitaro)C++20
100 / 100
1500 ms196916 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],adj2[L]; pii dp[L][sq+10]; int pt[L]; bool bad[L]; int pd[L]; vector<int> num; vector<pii> av; 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); adj2[u].pb(v); } for(int i=1;i<=n;i++){ reset(); 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(int i=1;i<=n;i++){ cout<<"dp["<<i<<"]: "; pr(dp[i],1,sq+1); } */ 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-1){ 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; } pd[v] = 0; av.clear(); av.pb(pii(0,v)); for(int i=v-1;i>=1;i--){ pd[i] = -inf; if(!adj2[i].size()) continue; for(auto u:adj2[i]){ if(u <= v) pd[i] = max(pd[i],pd[u]+1); } av.pb(pii(pd[i],i)); } sort(all(av)); int ans = -inf; while(av.size()){ if(!bad[av.back().s]){ ans = av.back().f; break; } av.pp(); } if(ans < 0) cout<<-1<<'\n'; else cout<<ans<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...