제출 #1031658

#제출 시각아이디문제언어결과실행 시간메모리
1031658SamuellH12Bitaro’s Party (JOI18_bitaro)C++17
7 / 100
1583 ms524288 KiB
#include <bits/stdc++.h> #define ALL(x) x.begin(), x.end() #define pii pair<int,int> const int MAXN = 1e5 + 64; const int SQRT = 300; using namespace std; #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma,tune=native") int block[MAXN], dp[MAXN], order[MAXN], tempo; vector<int> trafo[MAXN]; pii best[MAXN][4*SQRT+5]; // 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][0] = pii(0, u); int sz = 1; for(auto v : trafo[u]){ for(auto [x, w] : best[v]) { if(w == -1) break; best[u][sz++] = pii(x-1, w); } if(sz >= 3*SQRT) { sort(best[u], best[u]+sz); sz = min(SQRT, (int)(unique(best[u], best[u]+sz) - best[u])); } } sort(best[u], best[u]+sz); sz = min(SQRT, (int)(unique(best[u], best[u]+sz) - best[u])); best[u][sz] = pii(999999, -1); } 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(w == -1) break; 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; }

컴파일 시 표준 에러 (stderr) 메시지

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