Submission #73019

#TimeUsernameProblemLanguageResultExecution timeMemory
73019mraronBitaro’s Party (JOI18_bitaro)C++14
0 / 100
9 ms7416 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back vector<int> adj[100001]; vector<int> badj[100001]; int indeg[100001]; const int BLKSZ=300; vector<pair<int,int>> best[100001]; int dp[100010]; int bannolt[100010]; int dfs(int x) { if(dp[x]!=-2) { return dp[x]; } int ans=-1; if(!bannolt[x]) { ans=0; } for(auto i:badj[x]) { if(dfs(i)>=0) { ans=max(ans, dfs(i)+1); } } // cerr<<x<<"->"<<ans<<" | "<<bannolt[x]<<"\n"; return dp[x]=ans; } int main() { int n,m,q; cin>>n>>m>>q; for(int i=0;i<m;++i) { int a,b; cin>>a>>b; adj[a].pb(b); badj[b].pb(a); indeg[b]++; } set<pair<int,int>> st; for(int i=1;i<=n;++i) { st.insert({indeg[i], i}); } while(!st.empty()) { pair<int,int> akt=*st.begin(); cerr<<akt.first<<" "<<akt.second<<"\n"; st.erase(st.begin()); priority_queue<pair<int,int>> pq; //(dist, honnan) pq.push({0, akt.second}); for(auto i:badj[akt.second]) { for(auto j:best[i]) { if(j.first+1>-pq.top().first) pq.push({-j.first-1, j.second}); } while(pq.size()>BLKSZ) { pq.pop(); } } while(!pq.empty()) { best[akt.second].push_back({-pq.top().first, pq.top().second}); pq.pop(); } reverse(best[akt.second].begin(), best[akt.second].end()); for(auto i:adj[akt.second]) { auto it=st.lower_bound({indeg[i], i}); auto val=*it; st.erase(it); val.first--; indeg[i]--; st.insert(val); } } for(int i=0;i<q;++i) { int place; int cnt; cin>>place>>cnt; vector<int> banned(cnt); for(int i=0;i<cnt;++i) { cin>>banned[i]; bannolt[banned[i]]=1; } bool ok=false; for(int j=0;j<(int)best[place].size();++j) { if(!bannolt[best[place][j].second]) { ok=true; cout<<best[place][j].first<<"\n"; break ; } } if(ok) { continue ; }else if(best[place].size()<BLKSZ) { cout<<"-1\n"; continue ; } for(int i=1;i<=n;++i) { dp[i]=-2; } cout<<dfs(place)<<"\n"; for(int i=0;i<cnt;++i) { bannolt[banned[i]]=0; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...