제출 #1248774

#제출 시각아이디문제언어결과실행 시간메모리
1248774Joon_Yorigami던전 (IOI21_dungeons)C++20
0 / 100
3 ms840 KiB
#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;

constexpr ll maxn = 400005;
constexpr ll loge = 25;

//binlift
ll par[maxn][loge];
ll gain[maxn][loge];
ll allwin[maxn];
ll allstrength;
ll N;

void init(int n, std::vector<int> s, std::vector<int> p, std::vector<int> w, std::vector<int> l) {
  N=n;
  allstrength=s[0];
  par[n][0]=n;
  gain[n][0]=0;
  for(int i=0;i<n;i++)
  {
    par[i][0]=l[i];
    gain[i][0]=p[i];
  }
  for(int j=1;j<loge;j++)
  {
    for(int i=0;i<=n;i++)
    {
      par[i][j]=par[par[i][j-1]][j-1];
      gain[i][j]=gain[par[i][j-1]][j-1]+gain[i][j-1];
    }
  }
  for(int i=n;i>=0;i--)
  {
    allwin[i]=0;
  }
  for(int i=n-1;i>=0;i--)
  {
    allwin[i]=s[i]+allwin[w[i]];
  }
	return;
}

long long simulate(int x, int strength)
{
  ll p = 24;
  while(p>=0&&strength<=allstrength)
  {
    if((p==0&&strength<allstrength) || (par[x][p]!=N && strength+gain[x][p]<=allstrength))
    {
      cerr << p << ": " << strength << "," << gain[x][p] << '\n';
      strength+=gain[x][p];
      x=par[x][p];
    }
    p--;
  }
  cerr << "owo\n";
	return strength+allwin[x];
}

#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...