比赛 |
树形数据结构拔高 |
评测结果 |
WWWWWWWWWWWWWWWWWWWW |
题目名称 |
滑稽♂树 |
最终得分 |
0 |
用户昵称 |
Ruyi |
运行时间 |
1.588 s |
代码语言 |
C++ |
内存使用 |
4.58 MiB |
提交时间 |
2025-04-17 20:45:24 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
int num;
vector<int> v;
}d[30001];
int n,q,u,v,c[30001],k,a,b,x,s,cnt,op;
void f(int rt){
c[++cnt]=d[rt].num;
s=d[rt].v.size();
if(s!=0) for(int i=0;i<s;i++) f(d[rt].v[i]);
}
int main(){
freopen("hjtree.in","r",stdin);
freopen("hjtree.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) cin>>d[i].num;
for(int i=1;i<n;i++){
cin>>u>>v;
d[u].v.push_back(v);
}
cin>>q;
while(q--){
cin>>op>>u;
if(op==1){
cin>>k;
cnt=0;
f(u);
sort(c+1,c+cnt+1);
cout<<c[k]<<endl;
}else if(op==2){
cin>>a>>b;
cnt=0;
f(u);
sort(c+1,c+cnt+1);
bool flag=true;
for(int i=1;i<=cnt;i++){
if(flag&&c[i]>=a){
flag=false;
a=i;
}
if(c[i]>b){
b=i;
break;
}
if(i==cnt){
b=cnt+1;
if(flag) a=cnt+1;
}
}
cout<<b-a<<endl;
}else{
cin>>x;
d[u].num=x;
}
}
return 0;
}