Submission #340554

#TimeUsernameProblemLanguageResultExecution timeMemory
340554ogibogi2004Bitaro’s Party (JOI18_bitaro)C++14
0 / 100
5 ms7404 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+6; const int SQRT=300; const int INF=2e9; vector<int>g[MAXN]; vector<int>rg[MAXN]; vector<pair<int,int> >bestSQRT[MAXN]; bool no[MAXN]; int dist[MAXN],n,m,q; bool c[MAXN]; bool cmp(pair<int,int> p1,pair<int,int> p2) { if(p1.second!=p2.second)return p1.second>p2.second; return p1.first<p2.first; } int calc(int u) { for(int i=1;i<=n;i++) { dist[i]=-INF; } dist[u]=0; for(int i=u-1;i>=1;i--) { for(auto v:g[u]) { dist[u]=max(dist[u],dist[v]+1); } } int ret=0; for(int i=1;i<=n;i++) { if(no[i])continue; ret=max(ret,dist[i]); } return ret; } void precompute() { for(int i=1;i<=n;i++) { vector<pair<int,int> >ivan; ivan.push_back({i,0}); for(auto v:rg[i]) { for(auto xd:bestSQRT[v]) { ivan.push_back({xd.first,xd.second+1}); } } sort(ivan.begin(),ivan.end(),cmp); for(auto xd:ivan) { if(c[xd.first])continue; bestSQRT[i].push_back(xd); if(bestSQRT[i].size()==SQRT) { break; } c[xd.first]=1; } for(auto xd:bestSQRT[i]) { c[xd.first]=0; } } } int main() { cin>>n>>m>>q; for(int i=0;i<m;i++) { int x,y; cin>>x>>y; g[x].push_back(y); rg[y].push_back(x); } precompute(); /*for(int i=1;i<=n;i++) { cout<<i<<":\n"; for(auto xd:bestSQRT[i]) { cout<<xd.first<<" "<<xd.second<<endl; } }*/ for(int i=1;i<=q;i++) { int x,y; cin>>x>>y; vector<int>busy; for(int j=0;j<y;j++) { int f; cin>>f; busy.push_back(f); no[f]=1; } int ans=-1; for(auto xd:bestSQRT[x]) { if(no[xd.first])continue; ans=xd.second; break; } if(ans!=-1) { cout<<ans<<endl; for(auto f:busy) { no[f]=0; } continue; } cout<<calc(x)<<endl; for(auto f:busy) { no[f]=0; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...