记录编号 605760 评测结果 AAAAAAAAAAAAAAAAA
题目名称 4172.[USACO25 Open Silver]Ski Slope 最终得分 100
用户昵称 Gravatar梦那边的美好ME 是否通过 通过
代码语言 C++ 运行时间 5.198 s
提交时间 2025-09-08 21:41:55 内存使用 29.49 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long

struct node{
	ll e,maxn[12];
}a[110000];

ll n,m,k;
ll d,p,maxm[12][110000],ans[12][110000];
ll maxn[12][110000];

bool cmp(node aa,node bb){
	return aa.maxn[k]<bb.maxn[k];
}

int main(){
//	freopen("in.in","r",stdin);
	freopen("Ski.in","r",stdin);
	freopen("Ski.out","w",stdout);
	scanf("%lld",&n);
	for(int i=2;i<=n;i++){
		scanf("%lld %lld %lld",&p,&d,&a[i].e);
		a[i].e+=a[p].e;
		for(int j=1;j<=11;j++){
			maxm[j][i]=maxm[j][p];
		}
		for(int j=1;j<=11;j++){
			if(d>maxm[j][i])
				swap(d,maxm[j][i]);
			a[i].maxn[j]=maxm[j][i];
		}
	}
	for(k=1;k<=11;k++){
		sort(a+1,a+1+n,cmp);
		for(int i=2;i<=n;i++){
			ans[k][i]=max(ans[k][i-1],a[i].e);
			maxn[k][i]=a[i].maxn[k];
		}
	}
	scanf("%lld",&m);
	while(m--){
		ll u,v;
		scanf("%lld %lld",&u,&v);
		v+=1;
		ll j=upper_bound(maxn[v]+1,maxn[v]+n+1,u)-maxn[v]-1;
		printf("%lld\n",ans[v][j]); 
	}
	return 0;
}