제출 #1224947

#제출 시각아이디문제언어결과실행 시간메모리
1224947minhpkSprinkler (JOI22_sprinkler)C++20
50 / 100
574 ms105976 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,mod;
vector <int> z[1000005];
int par[1000005];
int dp[250005][42];
void dfs(int i){
    for (auto p:z[i]){
         if (p==par[i]){
             continue;
         }
         par[p]=i;
         dfs(p);
    }
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> a >> mod;
    for (int i=1;i<a;i++){
         int x,y;
         cin >> x >> y;
         z[x].push_back(y);
         z[y].push_back(x);
    }
    dfs(1);
    for (int i=0;i<=a;i++){
         for (int j=1;j<=40;j++){
             dp[i][j]=1;
         }
    }
    for (int i=1;i<=a;i++){
         cin >> dp[i][0];
    }
    int q;
    cin >> q;
    while (q--){
         int c;
         cin >> c;
         if (c==1){
             int x,d,w;
             cin >> x >> d >> w;
             int cur = x;
for (int i = d; i >= 0; i--) {
    dp[cur][i] = dp[cur][i] * w % mod;
    if (i > 0) {
        dp[cur][i-1] = dp[cur][i-1] * w % mod;
    }
    cur = par[cur];
}

         }else{
             int x;
             cin >> x;
             int res=1;
             for (int i=0;i<=40;i++){
                  res=res*dp[x][i]%mod;
                  x=par[x];
             }
             cout << res << "\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...