結果

問題 No.2325 Skill Tree
ユーザー Ajinoko33Ajinoko33
提出日時 2023-05-28 14:48:47
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 2,071 bytes
コンパイル時間 2,399 ms
コンパイル使用メモリ 213,124 KB
実行使用メモリ 19,584 KB
最終ジャッジ日時 2024-06-08 06:13:41
合計ジャッジ時間 19,851 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 2 ms
5,376 KB
testcase_03 AC 2 ms
5,376 KB
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 AC 510 ms
19,456 KB
testcase_17 AC 491 ms
19,584 KB
testcase_18 WA -
testcase_19 AC 507 ms
19,468 KB
testcase_20 WA -
testcase_21 AC 502 ms
19,436 KB
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 AC 520 ms
19,456 KB
testcase_26 WA -
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 WA -
testcase_33 WA -
testcase_34 WA -
testcase_35 WA -
testcase_36 WA -
testcase_37 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<n; i++)
#define Sort(vector) sort(vector.begin(), vector.end())
#define Reverse(vector) reverse(vector.begin(), vector.end())
#define RSort(vector) sort(vector.rbegin(), vector.rend())
using ll = long long;
using P = pair<ll,ll>;
using TU = tuple<int,int,int>;
using vint = vector<int>;
using vvint = vector<vint>;
using vvvint = vector<vvint>;
using vll = vector<ll>;
using vvll = vector<vll>;
using vvvll = vector<vvll>;
template<typename T> istream &operator>>(istream &is,vector<T> &v){for(T &in:v){is>>in;}return is;}
template<typename T> ostream &operator<<(ostream &os,vector<T> &v){for(int i=0;i<(int)v.size();i++){os<<v[i]<<" \n"[i==(int)v.size()-1];}return os;}
template<typename T> istream &operator>>(istream &is,vector<vector<T>> &v){for(vector<T> &in:v){is>>in;}return is;}
template<typename T> ostream &operator<<(ostream &os,vector<vector<T>> &v){for(vector<T> &out:v){os<<out;}return os;}




int main(){
  int n;cin>>n;
  vector<P> waza(n);
  for(int i=1;i<n;i++){
    ll l,a;cin>>l>>a;
    a--;
    waza[i]={l,a};
  }

  const ll INF=1e16;
  vll lowerLv(n,INF);
  // vll numLowerLv(n+10,INF);
  // numLowerLv[0]=-1;

  vector<vector<P>> nxtWaza(n);
  for(int i=1;i<n;i++) {
    auto [l,a]=waza[i];
    nxtWaza[a].push_back({l,i});
  }

  auto searchLowerLv=[&](auto f,int now,ll lv,int cnt)->void{
    cnt++;

    lowerLv[now]=lv;
    // numLowerLv[cnt]=min(numLowerLv[cnt],lv);

    for(auto [l,i]:nxtWaza[now]){
      f(f,i,max(lv,l),cnt);
    }
  };

  searchLowerLv(searchLowerLv,0,0,0);

  auto copy=lowerLv;
  Sort(lowerLv);



  int q;cin>>q;
  rep(_,q) {
    int c,x;cin>>c>>x;

    if(c==1){
      // int res=upper_bound(numLowerLv.begin(),numLowerLv.end(),x)-numLowerLv.begin();
      // res--;
      // cout<< res <<'\n';

      int res=upper_bound(copy.begin(),copy.end(),x)-copy.begin();
      // res--;
      cout<< res <<'\n';
    }else{
      x--;
      if(lowerLv[x]!=INF) cout<< lowerLv[x] <<'\n';
      else cout<< -1 <<'\n';
    }
  }


  

  return 0;
}
0