Submission #233961

#TimeUsernameProblemLanguageResultExecution timeMemory
233961kshitij_sodaniBitaro’s Party (JOI18_bitaro)C++17
100 / 100
1418 ms264312 KiB
#include <bits/stdc++.h> using namespace std; typedef int64_t llo; #define mp make_pair #define pb push_back #define a first #define b second int n,m,q,aa,bb; int vis[100001]; vector<int> adj[100001]; int x; const int ss=316; int dp[100001]; int calc(int ind){ for(int i=0;i<ind+1;i++){ dp[i]=0; if(vis[i]){ dp[i]=-1; } for(auto j:adj[i]){ if(dp[j]!=-1){ dp[i]=max(dp[i],dp[j]+1); } } } return dp[ind]; } pair<int,int> dist[100001][ss]; int ind[100001]; vector<int> freq[100001]; int pre(){ for(int i=0;i<n;i++){ //priority_queue<pair<int,int>> sso; int ma=0; for(auto j:adj[i]){ for(int k=0;k<ind[j];k++){ //sso.push(dist[j][k]); freq[dist[j][k].a+1].pb(dist[j][k].b); // cout<<dist[j][k].a+1<<" "<<dist[j][k].b<<endl; ma=max(ma,dist[j][k].a+1); } } //cout<<ma<<":"<<endl; int co=0; freq[0].pb(i); while(co<ss){ if(freq[ma].size()==0){ ma-=1; } // cout<<ma<<endl; if(ma<0){ break; } int tt=freq[ma].back(); if(vis[tt]){ freq[ma].pop_back(); continue; } vis[tt]=1; dist[i][co]={ma,tt}; freq[ma].pop_back(); // cout<<i<<","<<ma<<","<<tt<<endl; co+=1; } for(int j=0;j<co;j++){ vis[dist[i][j].b]=0; } /*if(co<ss){ dist[i][co]={0,i}; co+=1; }*/ ind[i]=co; for(auto j:adj[i]){ for(int k=0;k<ind[j];k++){ if(freq[dist[j][k].a+1].size()){ freq[dist[j][k].a+1].pop_back(); } } } // cout<<i<<" "<<co<<endl; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>m>>q; for(int i=0;i<n;i++){ vis[i]=0; } for(int i=0;i<m;i++){ cin>>aa>>bb; adj[bb-1].pb(aa-1); } pre(); int indd,nn; for(int ii=0;ii<q;ii++){ cin>>indd>>nn; indd-=1; vector<int> cur; int co=0; for(int j=0;j<nn;j++){ cin>>x; x-=1; // if(adj[x].size()==0){ vis[x]=1; cur.pb(x); co+=1; // } } if(co>=ss){ cout<<calc(indd)<<endl; } else{ int st=0; for(int i=0;i<ind[indd];i++){ if(vis[dist[indd][i].b]){ continue; } st=1; cout<<dist[indd][i].a<<endl; break; } if(st==0){ cout<<-1<<endl; } } for(auto j:cur){ vis[j]=0; } } return 0; }

Compilation message (stderr)

bitaro.cpp: In function 'int pre()':
bitaro.cpp:84:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...