Submission #1189523

#TimeUsernameProblemLanguageResultExecution timeMemory
1189523mannshah1211Sprinkler (JOI22_sprinkler)C++20
100 / 100
694 ms92228 KiB
/**
 *   author: tourist
 *   created: 21.04.2025 10:06:09
**/
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n;
  cin >> n;
  long long l;
  cin >> l;
  vector<vector<int>> g(n);
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    --u; --v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  vector<int> pv(n);
  auto Dfs = [&](auto&& self, int v, int pr) -> void {
    pv[v] = pr;
    for (int u : g[v]) {
      if (u != pr) {
        self(self, u, v);
      }
    }
  };
  Dfs(Dfs, 0, -1);
  vector<int> h(n);
  for (int i = 0; i < n; i++) {
    cin >> h[i];
  }
  vector<vector<int64_t>> lazy(n, vector<int64_t>(41, 1));
  int q;
  cin >> q;
  for (int qq = 0; qq < q; qq++) {
    int op;
    cin >> op;
    if (op == 1) {
      int x, d, w;
      cin >> x >> d >> w;
      int orig_d = d;
      --x;
      for (int j = 0; j <= orig_d; j++) {
        lazy[x][d] *= int64_t(w);
        lazy[x][d] %= l;
        if (d >= 1) {
          lazy[x][d - 1] *= int64_t(w);
          lazy[x][d - 1] %= l;
        }
        if (x == 0) {
          for (int i = 0; i < d - 1; i++) {
            lazy[x][i] *= int64_t(w);
            lazy[x][i] %= l;
          }
        }
        if (x > 0) {
          x = pv[x];
          --d;
        } else {
          break;
        }
      }
    } else {
      int x;
      cin >> x;
      --x;
      int64_t ans = h[x];
      for (int j = 0; j <= 40; j++) {
        ans *= lazy[x][j];
        ans %= l;
        if (pv[x] == -1) {
          break;
        }
        x = pv[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...