比赛 |
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;
}