Submission #697534

#TimeUsernameProblemLanguageResultExecution timeMemory
697534speedyArdaBitaro’s Party (JOI18_bitaro)C++14
7 / 100
2112 ms415184 KiB
#include "bits/stdc++.h" using namespace std; const int MAXN = 1e5+5; vector< vector< int> > rev(MAXN); vector< vector< pair<int, int> > > big(MAXN); int sqrtval; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m, q; cin >> n >> m >> q; sqrtval = sqrt(n); for(int i = 1; i <= m; i++) { int f, s; cin >> f >> s; rev[s].push_back(f); } for(int i = 1; i <= n; i++) { big[i].push_back({0, i}); for(int e : rev[i]) { for(pair<int, int> val : big[e]) { big[i].push_back({val.first + 1, val.second}); } } sort(big[i].begin(), big[i].end()); reverse(big[i].begin(), big[i].end()); vector< pair<int, int > > temp; for(int l = 0; l < big[i].size(); l++) { if(temp.empty() || temp.back().second != big[i][l].second) temp.push_back(big[i][l]); } big[i] = temp; if(big[i].size() > sqrtval) big[i].resize(sqrtval); } while(q--) { int city, forbiddencnt; cin >> city >> forbiddencnt; unordered_set<int> forbidden; int ans = -1; for(int i = 1; i <= forbiddencnt; i++) { int f; cin >> f; forbidden.insert(f); //if() } //cout << city << " " << forbiddencnt << " " << sqrtval << "\n"; if(forbiddencnt >= sqrtval) { //cout << "g\n"; int dp[n+5]; for(int i = 0; i <= n; i++) { dp[i] = -1e9; } dp[city] = 0; for(int i = city; i >= 1; i--) { //cout << dp[i] << "\n"; if(forbidden.find(i) == forbidden.end()) ans = max(ans, dp[i]); for(int e : rev[i]) { dp[e] = max(dp[e], dp[i] + 1); } } } else { for(int i = 0; i < min((int)big[city].size(), sqrtval); i++) { //cout << i << "\n"; if(forbidden.find(big[city][i].second) == forbidden.end()) { //cout << "G: " << big[city][i].second << "\n"; ans = big[city][i].first; break; } } } cout << ans << "\n"; } }

Compilation message (stderr)

bitaro.cpp: In function 'int main()':
bitaro.cpp:45:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |   for(int l = 0; l < big[i].size(); l++)
      |                  ~~^~~~~~~~~~~~~~~
bitaro.cpp:51:20: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   51 |   if(big[i].size() > sqrtval)
      |      ~~~~~~~~~~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...