Submission #1031610

#TimeUsernameProblemLanguageResultExecution timeMemory
1031610SamuellH12Bitaro’s Party (JOI18_bitaro)C++17
14 / 100
2059 ms241020 KiB
#include <bits/stdc++.h> #define ALL(x) x.begin(), x.end() #define pii pair<int,int> const int MAXN = 1e5 + 1; const int SQRT = 100; using namespace std; int block[MAXN], dp[MAXN], order[MAXN], tempo; vector<int> trafo[MAXN]; vector<pii> best[MAXN]; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int main(){ ios::sync_with_stdio(false); int n, m, q; scanf("%d %d %d", &n, &m, &q); for(int i=0, u, v; i<m; i++) { scanf("%d %d", &u, &v); trafo[v].push_back(u); dp[u]++; } deque<int> fila; for(int i=1; i<=n; i++) if(!dp[i]) fila.push_back(i); int od = n; while(!fila.empty()) { int u = fila.front(); fila.pop_front(); order[--od] = u; shuffle(ALL(trafo[u]), rng); for(int v : trafo[u]) if(--dp[v] == 0) fila.push_back(v); } order[n] = -1; for(int u : order) { if(u == -1) break; best[u].push_back(pii(0, u)); for(auto v : trafo[u]){ for(auto [x, w] : best[v]) best[u].push_back(pii(x-1, w)); if(best[u].size() >= 700) { sort(ALL(best[u])); best[u].resize(min(SQRT, (int)(unique(ALL(best[u])) - best[u].begin()))); } } sort(ALL(best[u])); best[u].resize(min(SQRT, (int)(unique(ALL(best[u])) - best[u].begin()))); } int t, y; while(q--) { tempo++; scanf("%d %d", &t, &y); for(int i=0, x; i<y; i++) { scanf("%d", &x); block[x] = tempo; } int ans = -1; for(auto [x, w] : best[t]) if(block[w] != tempo) { ans = -x; break; } if(ans == -1) for(int u : order) { dp[u] = (block[u] == tempo ? -1 : 0); for(auto v : trafo[u]) if(~dp[v]) dp[u] = max(dp[u], dp[v]+1); if(u == t){ ans = dp[u]; break; } } printf("%d\n", ans); } return 0; }

Compilation message (stderr)

bitaro.cpp: In function 'int main()':
bitaro.cpp:16:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |  scanf("%d %d %d", &n, &m, &q);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:20:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |   scanf("%d %d", &u, &v);
      |   ~~~~~^~~~~~~~~~~~~~~~~
bitaro.cpp:63:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |   scanf("%d %d", &t, &y);
      |   ~~~~~^~~~~~~~~~~~~~~~~
bitaro.cpp:67:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |    scanf("%d", &x);
      |    ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...