Submission #698419

#TimeUsernameProblemLanguageResultExecution timeMemory
698419speedyArdaBitaro’s Party (JOI18_bitaro)C++14
7 / 100
2085 ms398740 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); vector< vector<int> > vals(MAXN); int sqrtval = 750; bool forbidden[MAXN], cnt[MAXN]; 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++) { //vector<int> clean; vector<pair<int, int> > temp; temp.push_back({0, i}); for(int e : rev[i]) { for(pair<int, int> val : big[e]) { temp.push_back({val.first + 1, val.second}); } } sort(temp.begin(), temp.end()); for(int l = temp.size() - 1; l >= 0; l--) { if(big[i].size() >= sqrtval) break; if(cnt[temp[l].second]) continue; big[i].push_back(temp[l]); cnt[temp[l].second] = true; //clean.push_back(big[i][l].second); } for(pair<int, int> num : big[i]) cnt[num.second] = false; } while(q--) { int city, forbiddencnt; cin >> city >> forbiddencnt; vector<int> forbiddencurr; int ans = -1; for(int i = 1; i <= forbiddencnt; i++) { int f; cin >> f; forbiddencurr.push_back(f); forbidden[f] = true; //if() } int curridx = 0; //cout << city << " " << forbiddencnt << " " << sqrtval << "\n"; if(forbiddencnt >= sqrtval) { //cout << "g\n"; int dp[n+5]; for(int i = 0; i <= city; i++) { dp[i] = -1e9; } dp[city] = 0; for(int i = city; i >= 1; i--) { //cout << dp[i] << "\n"; if(!forbidden[i]) 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[big[city][i].second]) { //cout << "G: " << big[city][i].second << "\n"; ans = big[city][i].first; break; } } } for(int e : forbiddencurr) forbidden[e] = false; cout << ans << "\n"; } }

Compilation message (stderr)

bitaro.cpp: In function 'int main()':
bitaro.cpp:48:30: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   48 |             if(big[i].size() >= sqrtval)
      |                ~~~~~~~~~~~~~~^~~~~~~~~~
bitaro.cpp:79:7: warning: unused variable 'curridx' [-Wunused-variable]
   79 |   int curridx = 0;
      |       ^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...