Submission #603855

#TimeUsernameProblemLanguageResultExecution timeMemory
603855keta_tsimakuridzeDungeons Game (IOI21_dungeons)C++17
0 / 100
7 ms10836 KiB
#include "dungeons.h" #include<bits/stdc++.h> #define pii pair<long long, long long> #define f first #define s second using namespace std; #include <vector> vector<int> s, p, w, l; int n; const long long inf = 1e18; const int N =2e5; long long nxt[N][33][2], add[N][33][2], d[N][2]; vector<pii> V[N][2]; void bfs(int t) { for(int i = 0; i < n; i++) d[i][t] = inf; queue<int> q; q.push(n); while(q.size()) { int u = q.front(); q.pop(); for(int i = 0; i < V[u][t].size(); i++) { d[V[u][t][i].f][t] = d[u][t] + V[u][t][i].s; q.push(V[u][t][i].f); } } } void init(int N, std::vector<int> S, std::vector<int> P, std::vector<int> W, std::vector<int> L) { s = S; p = P; w = W; l = L; n = N; for(int i = 0; i < n; i++) nxt[i][0][0] = l[i], nxt[i][0][1] = w[i], add[i][0][0] = p[i], add[i][0][1] = s[i]; nxt[n][0][0] = nxt[n][0][1] = n; for(int i = 1; i <= 30; i++) { for(int j = 0; j <= n; j++) { for(int t = 0; t < 2; t++) nxt[j][i][t] = nxt[nxt[j][i - 1][t]][j][t], add[j][i][t] = add[j][i - 1][t] + add[nxt[j][i - 1][t]][i - 1][t]; } } for(int i = 0; i < n; i++) { V[l[i]][0].push_back({i, p[i]}); V[w[i]][1].push_back({i, s[i]}); } bfs(0); bfs(1); } long long get(int x, int t) { if(x == n) return 0; long long ans1 = 0; for(int i = 30; i >= 0; i--) { if(nxt[x][i][t] != n) ans1 += add[x][i][t], x = nxt[x][i][t]; } if(nxt[x][0][t] != n) ans1 = inf; return ans1; } long long simulate(int x, int Z) { long long ans1 = d[x][0] + Z, ans2 = Z; for(int i = 30; i >= 0; i--) { if(add[x][i][0] + ans2 < s[0]) { ans2 += add[x][i][0]; x = nxt[x][i][0]; } } if(ans2 < s[0]) { ans2 += add[x][0][0]; x = nxt[x][0][0]; } return (ans1 < s[0] ? ans1 : ans2 + d[x][1]); }

Compilation message (stderr)

dungeons.cpp: In function 'void bfs(int)':
dungeons.cpp:21:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |         for(int i = 0; i < V[u][t].size(); i++) {
      |                        ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...