제출 #499153

#제출 시각아이디문제언어결과실행 시간메모리
499153pavementBitaro’s Party (JOI18_bitaro)C++17
0 / 100
7 ms3532 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") using namespace std; using namespace __gnu_pbds; #ifdef _WIN32 #define getchar_unlocked _getchar_nolock #endif //#define int long long #define mp make_pair #define mt make_tuple #define pb push_back #define ppb pop_back #define eb emplace_back #define g0(a) get<0>(a) #define g1(a) get<1>(a) #define g2(a) get<2>(a) #define g3(a) get<3>(a) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef double db; typedef long long ll; typedef long double ld; typedef pair<int, int> ii; typedef tuple<int, int, int> iii; typedef tuple<int, int, int, int> iiii; typedef tree<ii, null_type, less<ii>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; const int B = 100; int N, M, Q, ans, dp[100005]; bool cannot[100005], seen[100005]; vector<int> tmp, adj[100005]; ii fr[100005][105]; priority_queue<tuple<ii, int, int> > pq; #ifdef _WIN32 #define getchar_unlocked _getchar_nolock #endif void read(int &v) { v = 0; char ch = getchar_unlocked(); for (; ch < '0' || ch > '9'; ch = getchar_unlocked()); for (; '0' <= ch && ch <= '9'; ch = getchar_unlocked()) v = (v << 3) + (v << 1) + (ch & 15); } main() { read(N); read(M); read(Q); for (int i = 1, S, E; i <= M; i++) { read(S); read(E); adj[E].pb(S); } for (int i = 1, idx; i <= N; i++) { while (!pq.empty()) pq.pop(); for (int j : adj[i]) pq.emplace(fr[j][1], j, 1); pq.emplace(mp(0, i), -1, -1); idx = 1; while (!pq.empty() && idx <= B) { auto [a, b, c] = pq.top(); pq.pop(); if (!seen[a.second]) { a.first++; fr[i][idx] = a; idx++; seen[a.second] = 1; } if (b != -1 && fr[b][c + 1].second) { c++; pq.emplace(fr[b][c], b, c); } } for (int j = 1; j < idx; j++) seen[fr[i][j].second] = 0; } for (int i = 1, T, Y; i <= Q; i++) { read(T); read(Y); for (int j = 1, x; j <= Y; j++) { read(x); tmp.pb(x); cannot[x] = 1; } ans = 0; if (Y < B) { for (int j = 1; j <= B; j++) if (!cannot[fr[T][j].second]) { ans = fr[T][j].first; break; } } else { for (int j = 1; j <= T; j++) { dp[j] = (cannot[j] ? -1e9 : 0); for (int k : adj[j]) dp[j] = max(dp[j], dp[k]); dp[j]++; } ans = dp[T]; } printf("%d\n", ans - 1); for (int j : tmp) cannot[j] = 0; tmp.clear(); } }

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

bitaro.cpp:48:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   48 | main() {
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...