Submission #160415

#TimeUsernameProblemLanguageResultExecution timeMemory
160415combi1k1Bitaro’s Party (JOI18_bitaro)C++14
7 / 100
2067 ms395104 KiB
#include<bits/stdc++.h> using namespace std; #define X first #define Y second #define pb push_back #define ii pair<int,int> #define FOR(i,a,b) for(int i = a ; i < b ; ++i) const int N = 1e5 + 1; const int B = 250; vector<int> g[N]; vector<ii> opt[N]; int vis[N]; int ban[N]; int len[N]; int tot = 1; int dfs(int u) { if (vis[u]) return 0; vis[u] = 1; opt[u].pb(ii(0,u)); for(int v : g[u]) { dfs(v); for(ii e : opt[v]) opt[u].pb(ii(e.X + 1,e.Y)); } sort (opt[u].begin(),opt[u].end(),greater<ii>()); for(; opt[u].size() > B ; opt[u].pop_back()); return 1; } int cal(int u) { if (vis[u]) return len[u]; len[u] = (ban[u] ? -N : 0); vis[u] = 1; for(int v : g[u]) len[u] = max(len[u],cal(v) + 1); return len[u]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; int m; cin >> m; int q; cin >> q; FOR(i,0,m) { int x; cin >> x; int y; cin >> y; g[y].pb(x); } FOR(i,1,n + 1) if(!vis[i]) dfs(i); FOR(i,1,q + 1) { int u; cin >> u; int k; cin >> k; vector<int> vv; FOR(i,0,k) { int x; cin >> x; ban[x] = 1; vv.pb(x); } int ans = -1; if (k < B) { for(ii e : opt[u]) if(!ban[e.Y]) ans = max(ans,e.X); } else { fill(vis + 1,vis + 1 + n,0); ans = max(ans,cal(u)); } for(int x : vv) ban[x] = 0; cout << ans << "\n"; } } /* 5 6 3 1 2 2 4 3 4 1 3 3 5 4 5 4 1 1 5 2 2 3 2 3 1 4 5 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...