提交时间:2024-09-15 12:44:47

运行 ID: 32572

#include<bits/stdc++.h> using namespace std; const int N = 1e6+10; #define int long long int n,q,a[N],fa[N],sum[N],maxn; vector<int> G[N]; struct T{ int op; int x; }e[N]; void dfs2(int x){ a[x]=0; for(int i=0;i<G[x].size();i++){ int v=G[x][i]; if(v==fa[x]) continue; a[x]+=a[v]; } for(int i=0;i<G[x].size();i++){ int v=G[x][i]; if(v==fa[x]) continue; dfs2(v); } } void dfs3(int x){ maxn=max(maxn,a[x]); for(int i=0;i<G[x].size();i++){ int v=G[x][i]; if(v==fa[x]) continue; dfs3(v); } } signed main(){ freopen("eternal.in","r",stdin); freopen("eternal.out","w",stdout); cin>>n>>q; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=2;i<=n;i++){ cin>>fa[i]; G[i].push_back(fa[i]); G[fa[i]].push_back(i); } bool flag=true; for(int i=1;i<=q;i++){ cin>>e[i].op>>e[i].x; if(e[i].x!=1) flag=false; } if(!flag){ for(int i=1;i<=q;i++){ if(e[i].op==1){ maxn=0; dfs3(e[i].x); cout<<maxn<<endl; } else{ dfs2(e[i].x); } } } return 0; }