Submission #1138602

#TimeUsernameProblemLanguageResultExecution timeMemory
1138602fzyzzz_zSprinkler (JOI22_sprinkler)C++20
100 / 100
624 ms102828 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int D = 40; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, md; cin >> n >> md; vector<vector<int>> g(n); for (int i = 0; i < n - 1; ++i) { int x, y; cin >> x >> y; x--; y--; g[x].push_back(y); g[y].push_back(x); } for (int i = 0; i < D; ++i) { g.push_back({n - 1}); g[n - 1].push_back({n}); n++; } vector<int> par(n, -1); function<void(int, int)> dfs = [&] (int x, int p) { for (auto y: g[x]) { if (y != p) { dfs(y, x); par[y] = x; } } }; dfs(n - 1, -1); vector<vector<ll>> f(n, vector<ll>(D + 1, 1)); for (int i = 0; i < n - D; ++i) { int x; cin >> x; f[i][0] = x; } int q; cin >> q; while (q--) { int t; cin >> t; if (t == 1) { int x, d, w; cin >> x >> d >> w; x--; while (d >= 0) { f[x][d] = (f[x][d] * w) % md; // if (d) f[x][d - 1] = (f[x][d - 1] * w) % md; d--; x = par[x]; } } else { int x; cin >> x; x--; ll res = 1; for (int d = 0; d <= D; ++d) { res *= f[x][d]; res %= md; if (d + 1 <= D) res *= f[x][d + 1]; if (res >= md) res %= md; 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...