Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
30779 | hi_hi | 【S】T2 | C++ | 运行出错 | 5 | 268 MS | 136012 KB | 945 | 2024-07-30 14:22:59 |
#include<bits/stdc++.h> using namespace std; #define int long long const int N=100010; const int mod=1e9+7; int n,m; int to[N],w[N],nxt[N],head[N],idx; void add(int x,int y){ to[++idx]=y; nxt[idx]=head[x]; head[x]=idx; } void remove(int x,int a,int b,int d){ if(d%2) w[x]-=a%mod+d*b%mod; else w[x]+=a%mod+b*d%mod; w[x]%=mod; if(w[x]<0) w[x]+=mod; for(int i=head[x];i;i=nxt[i]){ remove(to[i],a,b,d+1); } } void qwe(int x){ w[x]=0; for(int i=head[x];i;i=nxt[i]){ qwe(to[i]); } } signed main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<n;i++){ int x; cin>>x; add(x,i+1); } while(m--){ int p; cin>>p; if(p==1){ int x,a,b; cin>>x>>a>>b; remove(x,a,b,0); } if(p==2){ int x; cin>>x; if(w[x]>=0) cout<<w[x]<<endl; else cout<<w[x]+mod<<endl; } if(p==3){ int x; cin>>x; qwe(x); } } }