Submission #1107620

#TimeUsernameProblemLanguageResultExecution timeMemory
1107620vladiliusBitaro’s Party (JOI18_bitaro)C++17
0 / 100
3 ms592 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, q; cin>>n>>m>>q; vector<int> g[n + 1]; while (m--){ int x, y; cin>>x>>y; g[y].pb(x); } const int S = 300; vector<bool> ban(n + 1); function<int(int)> solve = [&](int v){ int mx = 0; for (int i: g[v]){ if (!ban[i]){ mx = max(mx, solve(i) + 1); } } return mx; }; vector<pii> A[n + 1]; vector<int> f(n + 1); vector<pii> bf(n + 1, {-1, -1}); set<pii> st; function<void(int)> dfs = [&](int v){ vector<int> all; for (int i: g[v]){ f[i] = 0; while (f[i] < A[i].size()){ if (bf[A[i][f[i]].ss].ss < A[i][f[i]].ff){ if (bf[A[i][f[i]].ss].ss != -1){ st.erase({bf[A[i][f[i]].ss].ss, bf[A[i][f[i]].ss].ff}); } st.insert({A[i][f[i]].ff, i}); bf[A[i][f[i]].ss] = {i, A[i][f[i]].ff}; all.pb(A[i][f[i]].ss); break; } f[i]++; } } while (A[v].size() < S && !st.empty()){ auto [c, i] = *prev(st.end()); st.erase(prev(st.end())); A[v].pb({c + 1, A[i][f[i]].ss}); f[i]++; while (f[i] < A[i].size()){ if (bf[A[i][f[i]].ss].ss < A[i][f[i]].ff){ if (bf[A[i][f[i]].ss].ss != -1){ st.erase({bf[A[i][f[i]].ss].ss, bf[A[i][f[i]].ss].ff}); } st.insert({A[i][f[i]].ff, i}); bf[A[i][f[i]].ss] = {i, A[i][f[i]].ff}; all.pb(A[i][f[i]].ss); break; } f[i]++; } } for (int i: all) bf[i] = {-1, -1}; all.clear(); if (A[v].size() < S){ A[v].pb({0, v}); } st.clear(); }; for (int i = 1; i <= n; i++){ if (A[i].empty()){ dfs(i); } } vector<int> a; while (q--){ int t, y; cin>>t>>y; for (int i = 0; i < y; i++){ int x; cin>>x; a.pb(x); ban[x] = 1; } if (y >= S){ cout<<solve(t)<<"\n"; } else { int out = -1; for (auto [x, y]: A[t]){ if (!ban[y]){ out = x; break; } } cout<<out<<"\n"; } for (int i: a) ban[i] = 0; a.clear(); } }

Compilation message (stderr)

bitaro.cpp: In lambda function:
bitaro.cpp:41:25: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |             while (f[i] < A[i].size()){
bitaro.cpp:59:25: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             while (f[i] < A[i].size()){
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...