比赛 |
2025.9.6 |
评测结果 |
AAAAAAAAAAAAAAAAA |
题目名称 |
Ski Slope |
最终得分 |
100 |
用户昵称 |
李奇文 |
运行时间 |
5.128 s |
代码语言 |
C++ |
内存使用 |
31.99 MiB |
提交时间 |
2025-09-06 11:09:15 |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,m,k,p[N],d[N],e[N],mh[N][12],_mh[12][N],ans[N][12];
struct node{
int e,h[12];
}_a[N];
bool cmp(node x,node y){
return x.h[k]<y.h[k];
}
signed main(){
freopen("Ski.in","r",stdin);
freopen("Ski.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i=2;i<=n;i++){
cin>>p[i]>>d[i]>>e[i];
e[i]+=e[p[i]];
_a[i].e=e[i];
for(int j=1;j<=11;j++){
mh[i][j]=mh[p[i]][j];
}
for(int j=1;j<=11;j++){
if(d[i]>mh[i][j]) swap(d[i],mh[i][j]);
_a[i].h[j]=mh[i][j];
}
}
for(int i=1;i<=11;i++){
k=i;
sort(_a+1,_a+1+n,cmp);
for(int j=2;j<=n;j++){
_mh[i][j]=_a[j].h[i];
ans[j][i]=max(ans[j-1][i],_a[j].e);
}
}
cin>>m;
for(int i=1;i<=m;i++){
int s,c;
cin>>s>>c;
/*int l=1,r=n,mid=0;
c++;
while(l<r){
mid=(l+r)>>1;
if(_mh[mid][c]<s){
l=mid+1;
}else{
r=mid-1;
}
}
*/
c++;
int hs=upper_bound(_mh[c]+1,_mh[c]+n+1,s)-_mh[c]-1;
cout<<ans[hs][c]<<"\n";
}
return 0;
}