Submission #1141231

#TimeUsernameProblemLanguageResultExecution timeMemory
1141231denislavSprinkler (JOI22_sprinkler)C++20
100 / 100
521 ms85788 KiB
# include <iostream> # include <vector> # include <queue> using namespace std; const int MAX=2e5+11+40; int n,q; long long bgn[MAX],MOD; vector<int> adj[MAX]; void read() { cin>>n>>MOD; for(int i=1;i<n;i++) { int u,v; cin>>u>>v; adj[u].push_back(v); adj[v].push_back(u); } for(int i=1;i<=n;i++) cin>>bgn[i]; } int up[MAX]; void dfs(int curr, int par) { up[curr]=par; for(int nxt: adj[curr]) { if(nxt==par) continue; dfs(nxt,curr); } } void tree_basics() { dfs(1,0); up[1]=n+1; for(int i=n+1;i<=n+39;i++) up[i]=i+1; } long long source[41][MAX]; void update(int u, int power, long long w) { for(int i=0;i<=power;i++) { int j=power-i; source[j][u]*=w;source[j][u]%=MOD; if(j==0) break; source[j-1][u]*=w;source[j-1][u]%=MOD; u=up[u]; } } void query(int u) { long long ans=bgn[u]; for(int i=0;i<=40;i++) { ans*=source[i][u];ans%=MOD; u=up[u]; } cout<<ans<<"\n"; } void solve() { for(int j=0;j<=40;j++) { for(int i=1;i<=n+40;i++) source[j][i]=1; } cin>>q; while(q--) { int tp; cin>>tp; if(tp==1) { int u,d,w; cin>>u>>d>>w; update(u,d,w); } else if(tp==2) { int u; cin>>u; query(u); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); read(); tree_basics(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...