Submission #438922

#TimeUsernameProblemLanguageResultExecution timeMemory
438922jlallas384던전 (IOI21_dungeons)C++17
13 / 100
348 ms55636 KiB
#include <bits/stdc++.h> #include "dungeons.h" using namespace std; using ll = long long; vector<vector<pair<int,ll>>> blw,bll; int n; vector<vector<pair<int,ll>>> build(vector<int> nxt,vector<int> add){ vector<vector<pair<int,ll>>> bl(n + 1,vector<pair<int,ll>>(30)); for(int i = 0; i < n; i++){ bl[i][0] = {nxt[i],add[i]}; } bl[n][0].first = n; for(int j = 1; j < 30; j++){ for(int i = 0; i <= n; i++){ bl[i][j].first = bl[bl[i][j - 1].first][j - 1].first; bl[i][j].second = bl[i][j - 1].second + bl[bl[i][j - 1].first][j - 1].second; } } return bl; } void init(int _n, vector<int> s, vector<int> p, vector<int> w, vector<int> l) { n = _n; blw = build(w,s); bll = build(l,p); } long long simulate(int x, int z) { ll res = z; for(int i = 29; i >= 0; i--){ if(res + bll[x][i].second < blw[0][0].second){ res += bll[x][i].second; x = bll[x][i].first; } } if(res < blw[0][0].second){ res += bll[x][0].second; x = bll[x][0].first; } for(int i = 29; i >= 0; i--){ if(blw[x][i].first != n){ res += blw[x][i].second; x = blw[x][i].first; } } return res + blw[x][0].second; }
#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...