Submission #130175

#TimeUsernameProblemLanguageResultExecution timeMemory
130175dooweyBitaro’s Party (JOI18_bitaro)C++14
0 / 100
18 ms11128 KiB
#pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ld, ld> pdd; #define fi first #define se second #define mp make_pair #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); const int N = (int)1e5 + 9; const int K = 205; const int inf = (int)1e8; vector<pii> best[N]; vector<int> T[N]; bool use[N]; int dp[N]; bool ban[N]; vector<pii> unite(vector<pii> a, vector<pii> b){ vector<pii> res; for(auto &p : b) p.fi ++ ; int i = 0, j = 0; pii r; while(i < a.size() && j < b.size()){ if(a[i] > b[j]){ r = a[i]; i ++ ; } else{ r = b[j]; j ++ ; } if(use[r.se]) continue; use[r.se] = true; res.push_back(r); } while(i < a.size()){ r = a[i]; i ++ ; if(use[r.se]) continue; use[r.se] = true; res.push_back(r); } while(j < b.size()){ r = a[j]; j ++ ; if(use[r.se]) continue; use[r.se] = true; res.push_back(r); } for(auto p : res) use[p.se] = false; while(res.size() > K) res.pop_back(); return res; } int main(){ fastIO; int n, m, q; cin >> n >> m >> q; int u, v; for(int i = 0 ; i < m ; i ++ ){ cin >> u >> v; T[v].push_back(u); } for(int i = 1; i <= n; i ++ ){ best[i].push_back({0, i}); for(auto p : T[i]){ best[i] = unite(best[i], best[p]); } } int x, k; vector<int> id; int d; int ret; for(int qq = 0 ; qq < q; qq ++ ){ cin >> x >> k; id.clear(); for(int j = 0 ; j < k ; j ++ ){ cin >> d; id.push_back(d); } for(auto p : id) ban[p] = true; if(k >= K){ for(int i = 1; i <= n; i ++ ) dp[i] = -inf; dp[x] = 0; ret = -1; for(int i = n; i >= 1; i ++ ){ if(!ban[i])ret = max(ret, dp[i]); for(auto vv : T[i]){ dp[vv] = max(dp[vv], dp[i] + 1); } } cout << ret << "\n"; } else{ ret = -1; for(auto p : best[x]){ if(!ban[p.se]){ ret = p.fi; break; } } cout << ret << "\n"; } for(auto p : id) ban[p] = false; } return 0; }

Compilation message (stderr)

bitaro.cpp: In function 'std::vector<std::pair<int, int> > unite(std::vector<std::pair<int, int> >, std::vector<std::pair<int, int> >)':
bitaro.cpp:35:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(i < a.size() && j < b.size()){
           ~~^~~~~~~~~~
bitaro.cpp:35:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(i < a.size() && j < b.size()){
                           ~~^~~~~~~~~~
bitaro.cpp:48:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(i < a.size()){
           ~~^~~~~~~~~~
bitaro.cpp:55:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(j < b.size()){
           ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...