Submission #769210

#TimeUsernameProblemLanguageResultExecution timeMemory
769210LucaIlieBitaro’s Party (JOI18_bitaro)C++17
14 / 100
2067 ms19732 KiB
#include <bits/stdc++.h> using namespace std; struct query { int q, u; vector<int> b; }; struct sol { int u, d; }; const int MAX_N = 1e5 + 1; const int MAX_Q = 1e5; const int INF = 1e9; bool blocat[MAX_N]; int dp[MAX_N], ans[MAX_Q]; vector<int> edges[MAX_N]; vector<query> queryMari; vector<query> queryMici[MAX_N]; vector<sol> sols[MAX_N]; int main() { int n, m, q; cin >> n >> m >> q; for ( int i = 0; i < m; i++ ) { int u, v; cin >> u >> v; edges[v].push_back( u ); } int tmax = 0;//floor( sqrt( n ) ); for ( int i = 0; i < q; i++ ) { int u, t; vector<int> b; cin >> u >> t; for ( int j = 0; j < t; j++ ) { int v; cin >> v; b.push_back( v ); } if ( t > tmax ) queryMari.push_back( { i, u, b } ); else queryMici[u].push_back( { i, u, b } ); } for ( query q: queryMari ) { for ( int u = 1; u <= n; u++ ) dp[u] = 0; for ( int u: q.b ) dp[u] = -INF; for ( int u = 1; u <= q.u; u++ ) { for ( int v: edges[u] ) dp[u] = max( dp[u], dp[v] + 1 ); } ans[q.q] = (dp[q.u] < 0 ? -1: dp[q.u]); } for ( int u = 1; u <= n; u++ ) { sols[u].push_back( { u, 0 } ); for ( int v: edges[u] ) { vector<sol> aux; int iu = 0, iv = 0; for ( int i = 0; i < tmax + 1 && i < sols[u].size() + sols[v].size(); i++ ) { if ( iu == sols[u].size() || sols[v][iv].d > sols[u][iu].d ) aux.push_back( sols[v][iv++] ); else aux.push_back( sols[u][iu++] ); } sols[u] = aux; } for ( query q: queryMici[u] ) { for ( int v: q.b ) blocat[v] = true; ans[q.q] = -1; for ( sol s: sols[u] ) { if ( !blocat[s.u] ) ans[q.q] = max( q.q, s.d ); } for ( int v: q.b ) blocat[v] = false; } } for ( int i = 0; i < q; i++ ) cout << ans[i] << "\n"; return 0; }

Compilation message (stderr)

bitaro.cpp: In function 'int main()':
bitaro.cpp:69:48: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<sol>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |             for ( int i = 0; i < tmax + 1 && i < sols[u].size() + sols[v].size(); i++ ) {
      |                                              ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:70:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<sol>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |                 if ( iu == sols[u].size() || sols[v][iv].d > sols[u][iu].d )
      |                      ~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...