Submission #1320296

#TimeUsernameProblemLanguageResultExecution timeMemory
1320296husseinjuandaBitaro’s Party (JOI18_bitaro)C++20
100 / 100
1088 ms283632 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int B = 100; signed main(){ ios::sync_with_stdio(false); cin.tie(0); int n, m, q; cin >> n >> m >> q; vector<vector<int>> g(n+1); vector<vector<int>> rg(n+1); for(int i = 0; i < m; i++){ int a, b; cin >> a >> b; // if(a < b){ // swap(a, b); // } g[a].push_back(b); rg[b].push_back(a); } vector<vector<pair<int, int>>> path(n+1); //path vector<int> mx(n+1, -1); for(int i = 1; i <= n; i++){ path[i].push_back({0, i}); mx[i] = 0; for(int y = 0; y < rg[i].size(); y++){ for(auto k : path[rg[i][y]]){ if(mx[k.second] == -1){ path[i].push_back({k.first+1, k.second}); mx[k.second] = k.first+1; }else{ mx[k.second] = max(mx[k.second], k.first+1); } } } for(int y = 0; y < path[i].size(); y++){ path[i][y].first = mx[path[i][y].second]; mx[path[i][y].second] = -1; } sort(path[i].rbegin(), path[i].rend()); while(path[i].size() > B){ path[i].pop_back(); } } for(int i = 1; i <= n; i++){ for(int y = 0; y < path[i].size(); y++){ swap(path[i][y].first, path[i][y].second); } sort(path[i].begin(), path[i].end()); } while(q--){ int k; cin >> k; int sz; cin >> sz; vector<int> j(sz); for(int i = 0; i < sz; i++){ cin >> j[i]; } sort(j.begin(), j.end()); if(sz >= B){ vector<int> dp(n+1, 0); for(int i = 0; i < sz; i++){ dp[j[i]] = -1e18; } for(int i = 1; i < k; i++){ for(int y = 0; y < g[i].size(); y++){ dp[g[i][y]] = max(dp[g[i][y]], dp[i]+1); } } if(dp[k] < 0){ dp[k] = -1; } cout << dp[k] << "\n"; }else{ int it = 0; int mx = -1; for(int y = 0; y < j.size(); y++){ while(it < path[k].size()){ if(path[k][it].first == j[y]){ it++; }else if(path[k][it].first < j[y]){ mx = max(mx, path[k][it].second); it++; }else{ break; } } } for(int y = it; y < path[k].size(); y++){ mx = max(mx, path[k][y].second); } cout << mx << "\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...