Submission #582148

#TimeUsernameProblemLanguageResultExecution timeMemory
582148kamalsharmaa9Bitaro’s Party (JOI18_bitaro)C++14
100 / 100
1968 ms363560 KiB
//#pragma GCC target("popcnt") //https://pastebin.com/jVURaNCJ #include<bits/stdc++.h> #include <cstdio> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; #define N 100002 #define ff first #define ss second //#define int long long #define pb push_back #define mp make_pair #define pii pair<int,int> #define vi vector<int> #define mii map<int,int> #define pqb priority_queue<int> #define pqs priority_queue<int,vi,greater<int> > #define setbits(x) __builtin_popcountll(x) #define zrobits(x) __builtin_ctzll(x) #define mod 1000000007 #define inf 1e18 #define ps(x,y) fixed<<setprecision(y)<<x #define mk(arr,n,type) type *arr=new type[n]; #define w(x) int x; cin>>x; while(x--) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef tree<pii, null_type, less<pii>, rb_tree_tag, tree_order_statistics_node_update> pbds; uniform_int_distribution<int> dist(1, (int) 2e9); void c_p_c() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int B; vector<int>gr[N]; vector<pii>dc[N]; int v[N]; int vis[N]; vector<pii>temp[N]; void dfs(int node) { temp[node].pb({0, node}); sort(temp[node].begin(), temp[node].end(), greater<pii>()); int taken = 0; for (int i = 0; i < temp[node].size() && taken < B; i++) { if (vis[temp[node][i].second] == node) continue; vis[temp[node][i].second] = node; dc[node].pb(temp[node][i]); taken++; } for (auto child : gr[node]) { for (int j = 0; j < dc[node].size(); j++) { temp[child].pb({dc[node][j].first + 1, dc[node][j].second}); } } } int dp[N]; int32_t main() { c_p_c(); B = 120; int n, m, q; cin >> n >> m >> q; for (int i = 0; i <= n; i++) dc[i].clear(), gr[i].clear(), v[i] = 0, vis[i] = 0, temp[i].clear(); for (int i = 1; i <= m; i++) { int a, b; cin >> a >> b; gr[a].pb(b); } for (int i = 1; i <= n; i++) { dfs(i); } while (q--) { int a, c; cin >> a >> c; for (int i = 1; i <= c; i++) { int d; cin >> d; v[d] = q + 1; } if (c < B) { int maxi = -1; for (int j = 0; j < dc[a].size(); j++) { if (v[dc[a][j].second] != q + 1) { maxi = dc[a][j].first; break; } } cout << maxi << '\n'; } else { for (int i = 0; i <= a; i++) dp[i] = 0; for (int i = 1; i <= a; i++) { //cout << i << endl; if (v[i] == q + 1 && dp[i] == 0) { continue; } for (auto child : gr[i]) { dp[child] = max(dp[child], dp[i] + 1); } } if (v[a] == q + 1 && dp[a] == 0) cout << -1 << '\n'; else cout << dp[a] << '\n'; } } return 0; }

Compilation message (stderr)

bitaro.cpp: In function 'void dfs(int)':
bitaro.cpp:50:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |   for (int i = 0; i < temp[node].size() && taken < B; i++)
      |                   ~~^~~~~~~~~~~~~~~~~~~
bitaro.cpp:62:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |     for (int j = 0; j < dc[node].size(); j++)
      |                     ~~^~~~~~~~~~~~~~~~~
bitaro.cpp: In function 'int32_t main()':
bitaro.cpp:105:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |       for (int j = 0; j < dc[a].size(); j++)
      |                       ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...