제출 #1274455

#제출 시각아이디문제언어결과실행 시간메모리
1274455coderpemulaSprinkler (JOI22_sprinkler)C++20
100 / 100
633 ms88712 KiB
#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> #define int long long #define pb push_back #define pii pair<int,int> #define fi first #define se second using namespace std; vector<int>v[200001]; int par[200001],dp[200001][42]; // 0 = left, 1 = right void dfs(int node){ for(auto x:v[node]){ if(x == par[node]) continue; par[x] = node; dfs(x); } } signed main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int i,j,t,x,d,qt,n,mod; cin>>n>>mod; int anu[n+1]; for(i=1;i<=n;i++){ for(j=0;j<=41;j++) dp[i][j] = 1; } for(i=1;i<n;i++){ cin>>j>>t; v[j].pb(t); v[t].pb(j); } for(i=1;i<=n;i++) cin>>anu[i]; par[1] = 0; dfs(1); cin>>qt; while(qt--){ cin>>t; if(t == 1){ cin>>x>>d>>j; while(true){ dp[x][d] = dp[x][d]*j%mod; if(x == 1 or d == 0) break; d--; x = par[x]; } } else{ cin>>x; int dst = 0,ans=anu[x]; while(true){ if(dst > 40) break; if(x == 1){ for(i=dst;i<=40;i++) ans = ans*dp[x][i]%mod; break; } ans = ans*dp[x][dst]%mod*dp[x][dst+1]%mod; dst++; x = par[x]; } cout<<ans<<"\n"; } } 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...