제출 #1314040

#제출 시각아이디문제언어결과실행 시간메모리
1314040m.h.nBitaro’s Party (JOI18_bitaro)C++20
0 / 100
6 ms9836 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> pii; const int maxn = 1e5 + 100; int k; vector<int> add[maxn]; vector<int> rem[maxn]; set<pii> st[maxn]; set<pii> stt[maxn]; int dp[maxn]; void dfs(int x){ for(auto u : rem[x]){ for(auto p : st[u]){ pii tmp = p; auto ss = stt[x].lower_bound({tmp.second,-1}); if(ss != stt[x].end() && ss->first == tmp.second){ pii dd = *ss; if(dd.second < tmp.first+1){ auto it = st[x].find({dd.second,dd.first}); if(it != st[x].end()) st[x].erase(it); stt[x].erase(ss); st[x].insert({tmp.first+1,tmp.second}); stt[x].insert({tmp.second,tmp.first+1}); } } else { st[x].insert({tmp.first+1,tmp.second}); stt[x].insert({tmp.second,tmp.first+1}); } } st[x].insert({1,u}); stt[x].insert({u,1}); } st[x].insert({0,x}); stt[x].insert({x,0}); while(st[x].size()>k){ auto it = st[x].begin(); pii ss = *it; st[x].erase(it); auto it2 = stt[x].find({ss.second,ss.first}); if(it2 != stt[x].end()) stt[x].erase(it2); } } void ddfs(int x){ for(auto v : add[x]){ if(dp[v]==-1000000000) continue; if(dp[x] < dp[v] + 1) dp[x] = dp[v] + 1; } } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n,m,q; if(!(cin>>n>>m>>q)) return 0; k = sqrt(n) + 1; for(int i=1;i<=m;i++){ int u,v; cin>>u>>v; add[u].push_back(v); rem[v].push_back(u); } for(int i=1;i<=n;i++) dfs(i); while(q--){ int u; cin>>u; set<int> no; int tt; cin>>tt; for(int i=0;i<tt;i++){ int v; cin>>v; no.insert(v); } if(no.size() < k){ int ans = 0; for(auto p : st[u]){ if(no.find(p.second) == no.end()) ans = max(ans,p.first); } cout<<ans<<"\n"; } else { for(int i=1;i<=n;i++) dp[i] = -1000000000; dp[u]=0; for(int i=u;i>0;i--) ddfs(i); int ans = -1000000000; for(int i=1;i<=u;i++){ if(!no.count(i)) ans = max(ans, dp[i]); } cout<<ans<<"\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...