Submission #128747

#TimeUsernameProblemLanguageResultExecution timeMemory
128747BTheroBitaro’s Party (JOI18_bitaro)C++17
7 / 100
2050 ms16456 KiB
// Why am I so dumb? :c // chrono::system_clock::now().time_since_epoch().count() //#pragma GCC optimize("Ofast") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> #define pb push_back #define mp make_pair #define all(x) (x).begin(), (x).end() #define fi first #define se second using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef pair<int, int> pii; template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; const int MAXN = (int)1e5 + 5; const int INF = (int)1e9; const int K = 300; pair<int, vector<int> > req[MAXN]; vector<int> adj[MAXN], par[MAXN]; pii best[MAXN][K + 1]; int ban[MAXN]; int n, m, q; void solve() { scanf("%d %d %d", &n, &m, &q); for (int i = 1; i <= m; ++i) { int u, v; scanf("%d %d", &u, &v); adj[u].pb(v); par[v].pb(u); } for (int i = 1; i <= q; ++i) { int v, sz; scanf("%d %d", &v, &sz); vector<int> tmp(sz); for (int j = 0; j < sz; ++j) { scanf("%d", &tmp[j]); } req[i] = mp(v, tmp); } for (int i = 1; i <= n; ++i) { for (int j = 0; j <= K; ++j) { best[i][j] = mp(-INF, 0); } } for (int i = 1; i <= n; ++i) { vector<pii> V; V.pb(mp(0, i)); for (int j : par[i]) { for (int k = 0; k <= K; ++k) { int w = best[j][k].fi; int v = best[j][k].se; V.pb(mp(w + 1, v)); } } sort(all(V)); reverse(all(V)); int ptr = 0; for (int j = 0; j < V.size(); ++j) { if (!ban[V[j].se] && ptr <= K) { ban[V[j].se] = 1; best[i][ptr++] = V[j]; } } for (int j = 0; j < V.size(); ++j) { ban[V[j].se] = 0; } } for (int i = 1; i <= q; ++i) { int v = req[i].fi, ans = -1; vector<int> V = req[i].se; for (int x : V) { ban[x] = 1; } if (V.size() > K) { vector<int> d(n + 1, -INF); d[v] = 0; for (int j = v - 1; j > 0; --j) { for (int p : adj[j]) { d[j] = max(d[j], d[p] + 1); } } for (int j = 1; j <= v; ++j) { if (!ban[j]) { ans = max(ans, d[j]); } } } else { for (int j = 0; j <= K; ++j) { if (!ban[best[v][j].se]) { ans = max(ans, best[v][j].fi); } } } printf("%d\n", ans); for (int x : V) { ban[x] = 0; } } } int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int tt = 1; while (tt--) { solve(); } return 0; }

Compilation message (stderr)

bitaro.cpp: In function 'void solve()':
bitaro.cpp:84:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 0; j < V.size(); ++j) {
                         ~~^~~~~~~~~~
bitaro.cpp:91:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 0; j < V.size(); ++j) {
                         ~~^~~~~~~~~~
bitaro.cpp:41:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %d", &n, &m, &q);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:45:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d", &u, &v);
         ~~~~~^~~~~~~~~~~~~~~~~
bitaro.cpp:52:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d", &v, &sz);
         ~~~~~^~~~~~~~~~~~~~~~~~
bitaro.cpp:56:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d", &tmp[j]);
             ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...