Submission #1278844

#TimeUsernameProblemLanguageResultExecution timeMemory
1278844LmaoLmaoBitaro’s Party (JOI18_bitaro)C++20
14 / 100
775 ms324336 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; using ll = long long; using ii = pair<int,int>; using aa = array<int,3>; const int B=400; vector<int> a[100005],adj[100005]; vector<ii> ans[100005]; int mp[100005]; int d[100005]; signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,m,q; cin >> n >> m >> q; for(int i=1;i<=m;i++) { int u,v; cin >> u >> v; adj[v].push_back(u); } for(int i=1;i<=n;i++) { ans[i].push_back({0,i}); for(int v:adj[i]) { vector<ii> mer; int j=0; for(ii x:ans[i]) { while(j<ans[v].size() && make_pair(ans[v][j].fi+1,ans[v][j].se)>=x) { mer.push_back({ans[v][j].fi+1,ans[v][j].se}); j++; } mer.push_back(x); } mer.erase(unique(mer.begin(),mer.end()),mer.end()); while(mer.size()>B) mer.pop_back(); ans[i]=mer; } //cout << i << endl; for(ii x:ans[i]) { // if(i==2) cout << x.fi << ' ' << x.se << endl; } } while(q--) { int u,k; cin >> u >> k; vector<int> sigma; for(int i=1;i<=k;i++) { int x; cin >> x; sigma.push_back(x); mp[x]=1; } if(k<B) { bool t=1; for(ii x:ans[u]) { if(!mp[x.se]) { cout << x.fi << '\n'; t=0; break; } } if(t) { cout << "-1\n"; } } else { for(int i=1;i<=u;i++) { if(mp[i]) d[i]=-1e9; } for(int i=1;i<=u;i++) { for(int v:adj[i]) { d[i]=max(d[i],d[v]+1); } } if(d[u]<0) cout << "-1\n"; else cout << d[u] << '\n'; for(int i=1;i<=u;i++) { d[i]=0; } } for(int x:sigma) { mp[x]=0; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...