比赛 2025.9.6 评测结果 AAAAAAAAAAAAAAAAA
题目名称 Ski Slope 最终得分 100
用户昵称 二乾五 运行时间 8.501 s
代码语言 C++ 内存使用 32.66 MiB
提交时间 2025-09-06 11:30:11
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define cpy(a,b) copy(begin(a),end(a),begin(b))
#define ld long double
#define dot(x) fixed<<setprecision(x)
#define foru(a,b,c) for(ll a=b;a<=c;a++)

ll n,p[100005],d[100005],e[100005],k,ans[13][100005];
ll m,s[100005],c[100005],skii[13][100005],maxn[13][100005];

struct ski{
    ll mx[13],sum;
}a[100005];

bool cmp(ski a,ski b){
    return a.mx[k]<b.mx[k];
}

int main(){
    freopen("Ski.in" ,"r",stdin );
    freopen("Ski.out","w",stdout);
    cin>>n;
    foru(i,2,n){
        cin>>p[i]>>d[i]>>e[i];
        e[i]+=e[p[i]];
        a[i].sum=e[i];
        foru(j,1,11)skii[j][i]=skii[j][p[i]];
        foru(j,1,11){
            if(d[i]>=skii[j][i])swap(d[i],skii[j][i]);
            a[i].mx[j]=skii[j][i];
        }
    }
    for(k=1;k<=11;k++){
        sort(a+1,a+n+1,cmp);
        foru(i,2,n){
            ans[k][i]=max(ans[k][i-1],a[i].sum);
            maxn[k][i]=a[i].mx[k];
        }
    }
    cin>>m;
    foru(i,1,m){
        cin>>s[i]>>c[i];
        ll t=upper_bound(maxn[c[i]+1]+1,maxn[c[i]+1]+n+1,s[i])-\
        maxn[c[i]+1]-1;
        cout<<ans[c[i]+1][t]<<"\n";
    }
    return 0;
}