Submission #963209

#TimeUsernameProblemLanguageResultExecution timeMemory
963209TimAniBitaro’s Party (JOI18_bitaro)C++17
0 / 100
238 ms61776 KiB
//start-time: 2024-04-14 19:39:32 #include <bits/stdc++.h> using namespace std; using ll = long long; void solve(){ ll n, m, q; cin >> n >> m >> q; vector<vector<ll>> g(n); vector<vector<ll>> gR(n); for(ll i = 0; i < m; i++){ ll u, v; cin >> u >> v; u--; v--; g[u].push_back(v); gR[v].push_back(u); } vector<ll> vis(n), topo; auto dfs = [&](ll u, auto&&dfs) -> void { vis[u] = 1; for(auto v : g[u]){ if(!vis[v]){ dfs(v, dfs); } } vis[u] = 2; topo.push_back(u); }; for(int i = 0; i < n; i++){ if(vis[i] == 0){ dfs(i, dfs); } } reverse(topo.begin(), topo.end()); vector<ll> cnt(n, 1); vector<set<array<ll, 2>>> dp(n); for(auto el : topo){ dp[el].insert({0, el}); } const ll w = round(sqrt(1000'000)); for(auto u : topo){ for(auto v : gR[u]){ for(auto [v, i] : dp[v]){ cnt[u] += cnt[v]; ll o = v; dp[u].insert({o + 1, i}); if(dp[u].size() > w){ dp[u].erase(dp[u].begin()); } } } } //for(auto el : dp){ //for(auto [v, l] : el){ //cout << v << ' ' << l << endl; //} //cout << endl; //} for(ll i = 0; i < q; i++){ ll u, num; cin >> u >> num; u--; set<array<ll, 2>> ms = dp[u]; vector<ll> c(100'000 + 1); for(ll j = 0; j < num; j++){ ll a; cin >> a; c[--a] = 1; } ll ans = -1; for(auto [v, i] : ms){ if(!c[i]){ ans = max(ans, v); } } cout << ans << endl; } } int main() { cin.tie(0)->sync_with_stdio(0); ll T = 1; //cin >> T; while(T--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...