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