제출 #1349926

#제출 시각아이디문제언어결과실행 시간메모리
1349926avighnaSprinkler (JOI22_sprinkler)C++20
3 / 100
4093 ms13864 KiB
#include <bits/stdc++.h>

using namespace std;

int main() {
  cin.tie(nullptr)->sync_with_stdio(false);

  int n, l;
  cin >> n >> l;
  vector<vector<int>> adj(n + 1);
  for (int i = 0, u, v; i < n - 1; ++i) {
    cin >> u >> v;
    adj[u].push_back(v), adj[v].push_back(u);
  }

  vector<int64_t> a(n + 1);
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
  }

  int q;
  cin >> q;
  while (q--) {
    int t;
    cin >> t;
    if (t == 1) {
      int x, d, w;
      cin >> x >> d >> w;
      queue<int> q;
      q.push(x);
      vector<int> dist(n + 1, int(1e9));
      dist[x] = 0;
      while (!q.empty()) {
        int u = q.front();
        q.pop();
        for (int &i : adj[u]) {
          if (dist[u] + 1 < dist[i]) {
            dist[i] = dist[u] + 1;
            q.push(i);
          }
        }
      }
      for (int i = 1; i <= n; ++i) {
        if (dist[i] <= d) {
          a[i] = (a[i] * w) % l;
        }
      }
    } else {
      int x;
      cin >> x;
      cout << a[x] << '\n';
    }
  }
}
#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...