# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1046237 | VMaksimoski008 | Dungeons Game (IOI21_dungeons) | C++17 | 7094 ms | 239660 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 4e5 + 5;
const int LOG = 41;
vector<int> S, P, W, L, graph[maxn];
int N, sub3 = 1, up[maxn][LOG], dist[maxn];
ll sum[maxn][LOG];
void dfs(int u) {
for(int &v : graph[u]) {
dist[v] = dist[u] + 1;
dfs(v);
}
}
void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l) {
N = n;
S = s;
P = p;
W = w;
L = l;
for(int i=1; i<N; i++) if(S[i] != S[i-1]) sub3 = 0;
for(int i=0; i<N; i++) graph[W[i]].push_back(i);
for(int i=0; i<N; i++) up[i][0] = L[i], sum[i][0] = P[L[i]];
up[N][0] = N; dfs(N);
for(int j=1; j<LOG; j++)
for(int i=0; i<=N; i++) up[i][j] = up[up[i][j-1]][j-1];
for(int j=1; j<LOG; j++)
for(int i=0; i<=N; i++) sum[i][j] = sum[i][j-1] + sum[up[i][j-1]][j-1];
return;
}
long long simulate(int x, int z) {
if(sub3) {
if(z >= S[x]) return (ll)z + (ll)dist[x] * S[x];
ll ans = z + P[x];
for(int i=LOG-1; i>=0; i--) {
if(up[x][i] == N) continue;
if(ans + sum[x][i] < S[x]) {
ans += sum[x][i];
x = up[x][i];
}
}
ans += sum[x][0];
x = up[x][0];
if(x == N) return ans;
return ans + (ll)S[x] * dist[x];
}
ll ans = z;
while(x != N) {
if(z >= S[x]) {
z += S[x];
x = W[x];
} else {
z += P[x];
x = L[x];
}
}
return z;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |